生活就像一盒巧克力,你永遠不知道下一顆是什麼味道
阿新 • • 發佈:2018-12-12
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