Help_裝箱/拆箱後的【==】與【Equals】問題,『★世界第一難題★』,也許只有編譯器才能解釋清楚_AX

來源:互聯網
上載者:User
這個能給我講明白的,絕對是高人了!
代碼如下:    如果不清楚可回帖詳問.

 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.