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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载] 什么时候应该使用 ==?什么时候应该使用 Equals?

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] 什么时候应该使用 ==?什么时候应该使用 Equals? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Equals 方法只是在 System.Object 中定義的一個虛擬方法,它由任何選擇執行該任務的類所重寫。== 運算符是一個可由類重載的運算符,該類通常具有恒等行為。

對于未重載 == 的引用類型,該運算符會比較兩個引用類型是否引用同一對象,而這恰好是 System.Object 中的 Equals 實現所做的工作。

對于未重載 == 的值類型,該運算符會比較這兩個值是否"按位"相等,即是否這兩個值中的每個字段都相等。當您對值類型調用 Equals 時,仍然會發生這一情況,但這一次,該實現是由 ValueType 提供的,并且使用反射進行比較,從而使比較速度比特定于類型的實現慢很多。

到此為止,二者是如此類似。二者之間的主要區別是多態。運算符被重載而不是被重寫,這意味著除非編譯器知道調用更為具體的版本,否則它只是調用恒等版本。為闡明這一點,請看下面這個示例:

using?System;
public?class?Test
{
static?void?Main()
{
????????
//?Create?two?equal?but?distinct?strings
????????string?a?=?new?string(new?char[]?{'h',?'e',?'l',?'l',?'o'});
????????
string?b?=?new?string(new?char[]?{'h',?'e',?'l',?'l',?'o'});
????????Console.WriteLine?(a
==b);
????????Console.WriteLine?(a.Equals(b));
????????
//?Now?let's?see?what?happens?with?the?same?tests?but
????????
//?with?variables?of?type?object
????????object?c?=?a;
????????
object?d?=?b;
????????Console.WriteLine?(c
==d);
????????Console.WriteLine?(c.Equals(d));
????}

}



結果是:
True
True
False
True

第三行是 False,原因在于編譯器不知道 c 和 d 的內容都是字符串引用,因而只能調用 == 的非重載版本。因為它們是對不同字符串的引用,所以恒等運算符返回 False。

那么,應該如何區別使用這些運算符呢?我的準則是:對于幾乎所有引用類型,當您希望測試相等性而不是引用一致性時,請使用 Equals。例外的情況是字符串 - 使用 == 比較字符串確實會使事情簡單得多,而且代碼可讀性更好,但是 您需要記住,該運算符的兩端都必須是類型字符串表達式,才能使比較正常進行。

對于值類型,我通常使用 ==,因為除非值類型本身包含引用類型(這種情況極為罕見),否則是恒等還是相等的問題無關緊要。

[作者:Jon Skeet]

轉載于:https://www.cnblogs.com/chinadhf/archive/2006/01/01/309390.html

總結

以上是生活随笔為你收集整理的[转载] 什么时候应该使用 ==?什么时候应该使用 Equals?的全部內容,希望文章能夠幫你解決所遇到的問題。

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