這個能給我講明白的,絕對是高人了!
代碼如下: 如果不清楚可回帖詳問.
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace AX
6{
7 class AXzhz
8 {
9 static void Main(string[] args)
10 {
11 //建立兩個string類型的對象,值均為"ii";
12 string i = "ii";
13 string j = "iii".Substring(1);
14 Console.WriteLine("i和j是否同一個對象:"+ReferenceEquals(i,j));//返回:false
15
16 //裝箱
17 object a = i;
18 object b = j;
19
20 //【分析】說明它使用的是object沒有重寫的"==",即判斷引用的是否為同一對象
21 Console.WriteLine(a==b);//返回:false
22
23 //【分析】說明它使用的是重寫過的object方法Equals(),
24 //即string類型的Equals()方法,來判斷對象是否為相同內容
25 Console.WriteLine(a.Equals(b));//返回:true
26
27 //【問題】string為參考型別無疑,且【==】和【Equals】都已重寫(都為比較對象內容是否相同),
28 //那為什麼裝箱後【==】使用沒有重寫(非重載,只有實值型別的才重載,真希望這裡是實值型別,就可以解釋通了)
29 //的方法,【Equals】則使用重寫過的方法呢?
30
31 /**//*引自【MSDN】VS2005版
32 *在參考型別中實現相等運算子 (==)
33 *如果類型是 Point、String、BigNumber 等基底類型,則應★重寫★相等運算子 (==)。
34 * 【附】
35 * 改為封裝int/char型,結果相同
36 * 但可以解釋為【==】的重載,即object類型中【==】的原始意思:判斷是否引用的同一對象,
37 * 而非重載後判斷兩個對象值是否相同,怎麼又回到重寫了?暈了,暈了,表妹!!!
38 */
39 Console.ReadLine();
40 }
41 }
42}
43