日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# == 和equals()区别

發布時間:2024/1/17 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# == 和equals()区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 如以下代碼:

?
1 2 3 4 5 int?age = 25; short?newAge = 25; Console.WriteLine(age == newAge);? //true Console.WriteLine(newAge.Equals(age)); //false Console.ReadLine();

  Answers:int和short為原始類型,但與“==”比較返回true,equals()比較返回false。為什么呢?

  簡而言之:

  “equals()”相比“= =”復雜。

--------------------------------------------------------------------------------------------------------

C#中的相等有兩種類型:引用相等(ReferenceEquals)和值相等(Equals)。值相等就是說兩個對象包含相同的值。而引用相等則比較的是兩個對象的引用是否是同一個對象。也就是說,如果ReferenceEquals為True,則Equals必然為True,反過來就不一定了。

這樣的話可以看出來,ReferenceEquals我們沒有比較去管他什么,系統自動解決,object類實現的靜態RefrenceEquals函數就夠了。而對于自定義的類型的話,如果想要實現判斷值相等,是需要重寫Equals函數的。

我們可以看一下string和自定義類的對比:

string?strA = "Hello";

string?strB =?string.Copy(strA);

Console.WriteLine(strA == strB);?????????//True

Console.WriteLine(strA.Equals(strB));????//True

Console.WriteLine(object.Equals(strA, strB));????//True

Console.WriteLine(object.ReferenceEquals(strA, strB));???????//False

class?MyClass

{

????public?int?value?= 1;

}

...

MyClass oA =?new?MyClass();

MyClass oB =?new?MyClass();

Console.WriteLine(oA == oB);???//False

Console.WriteLine(oA.Equals(oB));??//False

Console.WriteLine(object.Equals(oA, oB));??//False

Console.WriteLine(object.ReferenceEquals(oA, oB));?//False

先不考慮==號,看幾個Equals的表現,Equals是要實現值相等比較的效果的,.net?在實現string的時候就重寫了Equals(object) ,并添加重載函數Equals(string) ,因此兩個比較才會返回True。而不實現這兩個函數的后果就是都返回False,無法符合Equals函數應有的作用。

?

由此看來,對于之前我的需求:比較兩個自定義類的內容是否相同,還是應該重寫Equals(Object),并建議重載對自己的類的實現Equals(MyClass)

而對于==運算符的解釋為:通過過判斷兩個引用是否指示同一對象來測試是否相等。也就是引用相等了,可對于上面對string的測試,RefrenceEquals為False時,==卻返回的True,這是因為還有這么一條:當類型不可變(即實例中包含的數據不可更改)時,通過重載運算符==?來比較值是否相等而不是比較引用是否相等可能會很有用

我們大部分情況下寫的自定義類都是可變的,所以一般用不到也不應該對==進行重載

轉載于:https://www.cnblogs.com/aiqingqing/p/4514782.html

總結

以上是生活随笔為你收集整理的C# == 和equals()区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。