C#中的相等判斷:==和equals

在.net中跃惫,經(jīng)常需要比較兩個對象是否相等(值相等或者地址引用相同)钉嘹,而 .net(C#)中提供的相等判斷有很多種,有時候經(jīng)常搞混淆剖张,比如何時用==?何時用equals()方法揩环?為此搔弄,我決定花一點時間弄清楚這些相等判斷的含義及其用法,在此做個總結(jié)丰滑。

一. 相等判斷的種類

在C#中顾犹,如果需要對兩個對象進行相等判斷。不外乎兩種情況褒墨,判斷兩者的值相等或者判斷兩者的引用地址相同炫刷。一般情況下,我們需要對值類型對象判斷值相等(不清楚值類型和引用類型的可以自行百度)郁妈,對引用類型對象判斷指向地址相同浑玛。在C#中,一共提供了四種方式來進行判斷噩咪,分別如下:
. ==運算符
.對象自身的equals()方法
.object類的靜態(tài)方法equals()
.object類的靜態(tài)方法referenceequals()

二. 方法之間的差異

為了了解上述四種方法之間的差異顾彰,我做了一張表格极阅,如下


四種方法的區(qū)別.png

在上述表格中,比較了四種方法對不同的對象進行判斷所進行的真實操作涨享。其中筋搏,String類型的對象本來是屬于引用類型的,但是因為它是一種比較特殊的引用類型厕隧,所以此處單獨列出來奔脐。

下面對上述表格進行解釋:

  1. == 運算符
    如果作用于兩個值對象,兩個值類型對象的取值將進行比較吁讨。

int a=1;
int b=1;
a==b;//a與b的取值相等髓迎,因此==的結(jié)果為true

如果作用于兩個引用對象,則兩者進行地址的相等比較挡爵。

ClassTemp a =new ClassTemp(); //假設a為ClassTemp對象的一個實例
ClassTemp b =new ClassTemp(); // b同樣為ClassTemp的一個實例
a==b//a與b均為引用類型勋篓,兩者雖然內(nèi)容相同镶殷,但地址不同驮肉,返回false

如果==作用于兩個String類型對象全释,雖然String類型為引用類型,但因為String類對==運算符和equals()方法進行了override闭翩。因此判斷的結(jié)果還是比較兩個string的內(nèi)容是否相等挣郭。

  1. equals()方法
    object類定義了equals(object)方法這一個虛方法,由于object類為所有類的祖先疗韵,因此實際上每一個對象都包含了equals(objcet)方法兑障。
    這個方法的使用很簡單,例如:

int a=1;
int b=1;
a.equals(b);//a與b的取值相等蕉汪,結(jié)果為true
從表格中可以看出流译,equals()方法和==似乎沒有什么區(qū)別。不過者疤,MSDN中強烈建議我們對這個方法進行override來創(chuàng)建自己的“相等判斷”方法福澡。

  1. object.referenceEquals()和object.Equals()
    object 類還定義了兩個靜態(tài)方法equals(object,object)和referenceEquals(object,object)驹马。我們可以也可以利用這兩個方法進行相等比較革砸。
    referenceEquals(object,object)是對兩個對象的地址進行比較,如果兩個對象都為值類型糯累,則對兩個對象進行裝箱算利,因為裝箱后得到的地址必然不一樣,因此比較的結(jié)果為false泳姐。
    referenceEquals()特別適合下面這種情況使用:當某個類型的equals的方法被override了效拭,其對兩個引用類型的判斷不再是比較地址,而你又想對兩者進行地址判斷,此時使用referenceEquals方法最合適允耿,因為它是靜態(tài)方法借笙,不會被override。

object.equals(object)靜態(tài)方法的稍微復雜一點较锡,大致判斷邏輯如下:
如果你利用此方法對A,B進行判斷盗痒,即object.equals(A,B)
1蚂蕴,首先調(diào)用object.referenceEquals()對兩者地址進行相等判斷,如果相同俯邓,則返回true骡楼。
2,上述不成立稽鞭,則對兩者的地址是否都為null進行判斷鸟整,如果都為空,則返回true朦蕴。
3篮条,上述依然不成立,則調(diào)用A的equals方法吩抓,執(zhí)行方法A.equals(B)涉茧。

  1. 注意String 類
    1,String類對equals方法和==進行了override疹娶。
    2伴栓,String類因為存在intern pool機制,詳情請見MSDN雨饺。因此兩個String比較的結(jié)果钳垮,可能與預期不符合。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末额港,一起剝皮案震驚了整個濱河市饺窿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锹安,老刑警劉巖短荐,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叹哭,居然都是意外死亡忍宋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門风罩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糠排,“玉大人,你說我怎么就攤上這事超升∪牖拢” “怎么了哺徊?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乾闰。 經(jīng)常有香客問我落追,道長,這世上最難降的妖魔是什么涯肩? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任轿钠,我火速辦了婚禮,結(jié)果婚禮上病苗,老公的妹妹穿的比我還像新娘疗垛。我一直安慰自己,他們只是感情好硫朦,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布贷腕。 她就那樣靜靜地躺著,像睡著了一般咬展。 火紅的嫁衣襯著肌膚如雪泽裳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天挚赊,我揣著相機與錄音诡壁,去河邊找鬼。 笑死荠割,一個胖子當著我的面吹牛妹卿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔑鹦,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼夺克,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嚎朽?” 一聲冷哼從身側(cè)響起铺纽,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哟忍,沒想到半個月后狡门,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锅很,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年其馏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆安。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡叛复,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褐奥,我是刑警寧澤咖耘,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站撬码,受9級特大地震影響儿倒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耍群,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一义桂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹈垢,春花似錦、人聲如沸袖裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急鳄。三九已至谤民,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疾宏,已是汗流浹背张足。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坎藐,地道東北人为牍。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像岩馍,于是被迫代替她去往敵國和親碉咆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法蛀恩,類相關(guān)的語法疫铜,內(nèi)部類的語法,繼承相關(guān)的語法双谆,異常的語法壳咕,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,924評論 6 13
  • 一谓厘、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,257評論 0 16
  • 從三月份找實習到現(xiàn)在,面了一些公司趣避,掛了不少庞呕,但最終還是拿到小米、百度、阿里住练、京東地啰、新浪、CVTE讲逛、樂視家的研發(fā)崗...
    時芥藍閱讀 42,209評論 11 349
  • 愛情盏混,真是一個奇怪的東西蔚鸥。 愛情,是別人眼里的和自己碗里的许赃。 愛情止喷,是本不奢侈卻因為稀疏而被變得奢侈的事情。 到了...
    天然愛蘇三閱讀 1,850評論 0 1