官术网_书友最值得收藏!

5.8 對(duì)象相等性

如果想要比較兩個(gè)對(duì)象是否相等,則可以用==或與之相反的!=。舉例如下:

這些操作實(shí)際上可以被應(yīng)用于所有的對(duì)象,并不僅僅是基礎(chǔ)類型。比如,可以用==來(lái)比較列表:

沿著這個(gè)方向,還可以比較不同類型的兩個(gè)對(duì)象:

甚至可以拿對(duì)象與null做比較,或者與可能為null的對(duì)象做比較,并且不會(huì)拋出異常:

如你所見(jiàn),==的實(shí)現(xiàn)很用心,大部分場(chǎng)合都能返回給你需要的相等性比較的結(jié)果。這背后的規(guī)則很簡(jiǎn)單:首先檢查左側(cè)是否為null,如果不為null,則調(diào)用equals方法。由于equals是一個(gè)方法,因此得到的確切比較邏輯取決于左側(cè)參數(shù)的類型。由于有自動(dòng)的null檢查,因此我們不必親自做這個(gè)檢查。[10]

在這種比較邏輯下,對(duì)于不同的對(duì)象,只要它們的內(nèi)容一致,且equals方法的實(shí)現(xiàn)也是完全基于內(nèi)容的情況下,都會(huì)交出true答案。舉例來(lái)說(shuō),下面是針對(duì)兩個(gè)恰好擁有同樣的5個(gè)字母的字符串的比較:

Scala的==與Java的==的不同

在Java中,可以用==來(lái)比較基本類型和引用類型。對(duì)基本類型而言,Java的==比較的是值的相等性,就像Scala的一樣。但是對(duì)引用類型而言,Java的==比較的是引用相等性reference equality),意思是兩個(gè)變量指向JVM的堆上的同一個(gè)對(duì)象。Scala也提供了用于比較引用相等性的機(jī)制,即名稱為eq的方法。不過(guò),eq和與它對(duì)應(yīng)的ne只對(duì)那些直接映射到Java對(duì)象的對(duì)象有效。關(guān)于eq和ne的完整細(xì)節(jié)會(huì)在17.1節(jié)和17.2節(jié)給出。關(guān)于如何編寫(xiě)一個(gè)好的equals方法,請(qǐng)參考第8章。

主站蜘蛛池模板: 雷波县| 太和县| 罗城| 辽宁省| 古丈县| 昌江| 滦南县| 庆云县| 吉首市| 历史| 应城市| 怀柔区| 铁岭市| 宜春市| 东兴市| 江门市| 怀远县| 台东市| 乌苏市| 临高县| 祁门县| 广德县| 望奎县| 札达县| 湘潭市| 和田县| 云南省| 东乌珠穆沁旗| 靖边县| 资中县| 宣城市| 云安县| 顺义区| 桂林市| 依安县| 吴忠市| 林甸县| 滨州市| 永和县| 莱芜市| 渝北区|