迷惑的C#中的Object.Equals靜態方法

來源:互聯網
上載者:User

原文發表於 2008-07-30 23:06:34 在我的網易部落格,後被我刪掉(主要是想把網易部落格上的技術相關的文章都搬過來)
      最近一直在看<Pro c# with .NET 3.0, Special Edition>,第三章3.18.5節中講述了System.Object的靜態成員的Equals方法和ReferenceEquals方法,按照這本書的說法,Object.Equals(Object1,Object2)是用來比較兩個對象(屬於同一類型)的狀態是否相同.下面是其舉例:
    Person person3=new Person("Fred","Jones","222-22-2222",98);
    //Person 類有4個屬性:fName(String),lName(String),SSN(String),age(byte)
    Person person4=new Person("Fred","Jones","222-22-2222",98);
    按照其說法,person3和person4有相同的狀態,因此,object.Equals(person3,person4)的傳回值應該是True,然而,我在Visual studio 2005中編譯後得到的結果卻是:False.真是叫人很吃驚.後來我在網上查了一下object.Equals方法,一篇文章這樣寫:
    用反編譯工具反編譯System.dll得到方法的實現源碼:
    public static bool Equals(object objA, object objB)
    {
          if (objA == objB)
         { return true; }
         if ((objA != null) && (objB != null))
         { return objA.Equals(objB); }
        return false;
     }
    可以看到,兩個對象是否Equals,就要看其用等號判斷的值是否相等.而等號判斷兩個對象是否相等是看他們兩個對象是否有相同的引用(是否指向的是記憶體中的同一個對象的位置).雖然兩個對象狀態相同,但是,並沒有指向記憶體中相同地區,不屬於相同引用.因此傳回值是False.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.