C#編程(三十九)----------比較對象的相等性

來源:互聯網
上載者:User

標籤:new   靜態   強制轉換   返回   lib   三十九   重要   最大的   csdn   

比較對象的相等性

需要理解對象相等的機制對邏輯運算式的編程很重要,另外,對實現運算子多載和類型強制轉換也很重要.

對象相等的機制有所不同,這取決於比較的是參考型別還是實值型別.

 

比較參考型別的相等性

System.Object定義了三個不同的方法來比較對象的相等性:ReferenceEquals()和Equals()兩個版本,再加上比較子,實際上有四種進行相等比較的方式.

 

1.ReferenceEquals()方法

以下是ReferenceEquals()方法的定義

public static bool ReferenceEquals(object objA, object objB)

ReferenceEquals()是一個靜態方法,測試兩個引用是夠引用類的同一個執行個體,特別是兩個引用是否包含記憶體中的相同地址.作為靜態方法,他不能重寫,所以System.Object的實現代碼保持不變.如果提供的兩個引用引用同一個對象執行個體,則ReferenceEquals()總是返回true;否則就返回false.但是它預設 null等於null;

案例:

SomeClass x,y;

x=new SomeClass();

y=SomeClass();

bool b1=ReferenceEquals(null,null)  //返回真

bool b2=ReferenceEquals(null,x)  //返回假

bool b3=ReferenceEquals(x,y)  //返回假,因為x和y指向不同的對象

 

2.虛擬Equals()方法

以下是Equals()方法的定義:

public virtual bool Equals(object obj)

返回一個值,該值指示當前的object是否等於當前的object.

Equals的預設實現僅支援引用相等,但衍生類別可重寫此方法一直吃值相等.

在下面的列表中,x,y,z表示不為空白的引用:

(1)除設計浮點型的情況外,x.Equals(x)都返回true

(2)x.Equals(y)返回與y.Equals(x)相同的值

(3)如果x和y都為NaN,則x.Equals(y)返回true.

(4)若且唯若x.Equals(z)返回true時,(x.Equals(y)&&y.Equals(z))才返回相同的值

(5)只要不修改x和y引用的對象,對x.Equals(y)的相機調用將返回相同的值

(6)x.Equals(null)返回false

案例:

    public class Sample

    {

        public  void Method()

        {

            object obj1 = new object();

            object obj2 = new object();

            Console.WriteLine(obj1.Equals(obj2));//返回假

            obj2 = obj1;

            Console.WriteLine(obj1.Equals(obj2));//返回真

            Console.ReadKey();

        }

}

 

 

3.靜態Equals()方法

以下是靜態Equals()方法的定義

public static bool Equals(object objA , object objB)

如果objA是與objB相同的執行個體,或者如果兩者均為空白引用,或者如果objA.Equals(objB)返回true,則為true ,否則為false.

 

實值型別的相等比較

在進行實值型別的相等比較的時,採用與參考型別相同的規則:ReferenceEquals()用於比較引用,Equals()用於比較值.最大的區別是,實值型別需要裝箱才能把他們轉換為引用,才能對他們執行方法.

ReferenceEquals()在應用實值型別時,總是返回false,因為為了調用這個方法,實值型別需要裝箱到對象中.即使使用下面的代碼:

            int v = 10;

            bool b = ReferenceEquals(v, v);

            Console.WriteLine(b);//b返回false

因為在轉換每個參數時,v都睡被單獨裝箱.

C#編程(三十九)----------比較對象的相等性

聯繫我們

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