1. 程式人生 > >生活就像一盒巧克力,你永遠不知道下一顆是什麼味道

生活就像一盒巧克力,你永遠不知道下一顆是什麼味道

C#的==運算子與Equals()方法。

現在就說下兩者的區別:

1.==在比對值型別時,如果二者值相等,則返回true,否則返回false。

2.==在比對引用型別時,如果二者引用的是同一個物件,則返回true,否則返回false。

3.Equals()方法,在不重寫的情況下,與==沒區別。

4.微軟重寫了string的Equals()方法,使得這個方法比對的是string的字串內容,同時也過載了==運算子,使得string在進行==比對時,得到的結果與Equals()相同,即比對字串內容(這點區別於Java)

但是,是否只有string的Equals得到了重寫?讓我們看看下面這段程式碼和它的執行結果——

在將值型別的資料賦值給object型別的變數時,發生了裝箱操作:對值型別裝箱會在堆中分配一個物件例項,並將該值複製到新的物件中。

因此,a 和 b引用了堆上的兩個不同物件,==返回了false。

那麼,為什麼Equals()比對會返回true?按照之前的說明:Equals()方法,在不重寫的情況下,與==沒區別。Equals()返回的應該也是false才對。

原因就在於,a.Equals(b)所呼叫的Equals(),不是object的那個與==沒區別的Equals(),而是Int32中過載過的Equals()。

這個過載過的Equals(),能夠實現對Int32的值的比對,所以返回了與==不同的結果。

--------------------- 本文來自 自然妙有貓仙人 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/qq_32821435/article/details/79938561?utm_source=copy