Kotlin-30.相等性(Equality)

官方文檔: http://kotlinlang.org/docs/reference/equality.html

1.相等性(Equality)

與java不同, Kotlin有兩種相等性equality(即兩種等號):
    1.引用Referential相等(兩個引用是否指向同一對象)
        操作符: ===(!==)
        三個等號===的比較,是比較對象引用(地址),即判斷是否同一個對象!

    2.結(jié)構(gòu)Structural相等(用equals()檢查比較內(nèi)容是否相等)
        操作符: ==(!=)
        兩個等號==的比較,實際是通過equals()函數(shù)進行比較判斷!

2.引用相等(Referential equality)

引用相等的操作符: ===(否定形式!==)
三個等號===的比較,是比較對象引用(地址),即判斷是否同一個對象!
    a === b //當且僅當a和b指向同一個對象時,才為true

3.結(jié)構(gòu)相等(Structural equality)

結(jié)構(gòu)相等的操作符: ==(否定形式!=)
兩個等號==的比較,實際是通過equals()函數(shù)進行比較判斷!
按照慣例,像a == b表達式會被翻譯成:
    //如果a不為null,則調(diào)用equals(Any?)函數(shù),
    //否則檢查b是否與null引用相等!
    a?.equals(b) ?: (b === null)

提示: 當a == null比較時不必顯示優(yōu)化代碼, a == null會被自動轉(zhuǎn)換為a === null

4.數(shù)據(jù)類的例子

數(shù)據(jù)類已自動生成equals(),所以兩個等號==(結(jié)構(gòu)相等)比較的是對象數(shù)據(jù),例如:
    data class User(val name: String, val age: Int)

    fun main(args: Array<String>) {
        val u1 = User("lioil", 1)
        val u2 = User("lioil", 1)
        val u3 = User("lioil", 2)

        println(u1 == u2)  //輸出true,  對象數(shù)據(jù)相同
        println(u1 == u3)  //輸出false, 對象數(shù)據(jù)不同

        // u1,u2,u3都是不同對象,即對象引用(地址)不同
        println(u1 === u2) //輸出false, 對象引用(地址)不同
        println(u1 === u3) //輸出false, 對象引用(地址)不同
    }

而如果User類沒有data關(guān)鍵字:
    class User(val name: String, val age: Int)
    fun main(args: Array<String>) {
        val u1 = User("lioil", 1)
        val u2 = User("lioil", 1)

        //雖然兩個對象的數(shù)據(jù)內(nèi)容相同,
        //但是兩個等號==(結(jié)構(gòu)相等)是通過equals()進行判斷,
        //而普通類class沒有根據(jù)屬性成員定義equals(),需要我們自己定義
        println(u1 == u2)  //輸出false           
    }

簡書:http://www.reibang.com/p/39dea6a4c723
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/74276269
GitHub博客:http://lioil.win/2017/07/03/Kotlin-equality.html
Coding博客:http://c.lioil.win/2017/07/03/Kotlin-equality.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斯碌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肛度,更是在濱河造成了極大的恐慌傻唾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件承耿,死亡現(xiàn)場離奇詭異冠骄,居然都是意外死亡,警方通過查閱死者的電腦和手機瘩绒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門猴抹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锁荔,你說我怎么就攤上這事蟀给。” “怎么了阳堕?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵跋理,是天一觀的道長。 經(jīng)常有香客問我恬总,道長前普,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任壹堰,我火速辦了婚禮拭卿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贱纠。我一直安慰自己峻厚,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布谆焊。 她就那樣靜靜地躺著惠桃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辖试。 梳的紋絲不亂的頭發(fā)上辜王,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音罐孝,去河邊找鬼呐馆。 笑死,一個胖子當著我的面吹牛莲兢,可吹牛的內(nèi)容都是我干的摹恰。 我是一名探鬼主播辫继,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俗慈!你這毒婦竟也來了姑宽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闺阱,失蹤者是張志新(化名)和其女友劉穎炮车,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酣溃,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡瘦穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赊豌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛或。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碘饼,靈堂內(nèi)的尸體忽然破棺而出熙兔,到底是詐尸還是另有隱情,我是刑警寧澤艾恼,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布住涉,位于F島的核電站,受9級特大地震影響钠绍,放射性物質(zhì)發(fā)生泄漏舆声。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一柳爽、第九天 我趴在偏房一處隱蔽的房頂上張望媳握。 院中可真熱鬧,春花似錦磷脯、人聲如沸蛾找。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腋粥。三九已至晦雨,卻和暖如春架曹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闹瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工绑雄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奥邮。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓万牺,卻偏偏與公主長得像罗珍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脚粟,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

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