Kotlin學習之==、equals、===三者的區(qū)別與聯(lián)系
背景
????????在代碼中,我們經(jīng)常需要判斷兩個變量是否相等,這里相等一般有兩種含義,一種是判斷兩者是否指向同一個對象引用,另一種是判斷兩者屬性是否相同。
????????學過Java的同學應該知道,在Java中判斷是否指向同一個引用使用的是 ==,而判斷屬性是否相同,需要通過equals()方法來比較,并且此時就需要重寫equals()方法(一般需要同時重寫hashCod()e方法)。
????????但是在Kotlin中==的底層也是調用equals()方法,因此兩者是等價的。=== 又是什么?
測試
Kotlin中==的底層也是調用equals()方法,可以通過以下代碼來驗證。
????????根據(jù)以上代碼的驗證結果可知,重寫equals方法后,兩個不同對象(屬性相同),使用 == 運算,結果也為 true,因此 == 和 equals() 是等價的。
????????那么在Kotlin中難道就沒有明確比較兩個變量所指向的對象引用是否相同的方式了嗎?答案是有的,就是使用 === ,通過以下代碼可以驗證。
結論????????
????????至此,==、equals()和===三者的關系就已經(jīng)搞清楚了。
Kotlin中,== 和 equals()等價,== 的底層實際就是調用的equals(),默認是比較的兩個變量所指向的對象引用是否相同,可以通過重寫equals()方法(同時重寫hashCode()方法),修改為比較屬性值。
=== 用于檢查兩個變量是否引用相同的底層對象,無論對象是什么類型。
????????如果有哪里沒講明白或講的不對的地方,還請各位大佬評論區(qū)告訴我,一起交流學習。

????????下期預告:從本期內容可知,如果比較對象時,我們想要比較的是屬性值是否相同,而不是對象的引用是否相同,此時我們就需要重寫equals()方法(同時重寫hashcode()方法)。在Java中我們只能這么做,但在Kotlin中,它為我們提供了更加簡便的實現(xiàn)方式,那就是使用data修飾類,使其作為數(shù)據(jù)類,具體使用方式見下一期(點個關注,更新提醒,哈哈)。