新聞中心
Kotlin 中有兩種類型的相等性:
— 結(jié)構(gòu)相等(用 equals() 檢測);
— 引用相等(兩個引用指向同一對象)。
結(jié)構(gòu)相等
結(jié)構(gòu)相等由 ==(以及其否定形式 !=)操作判斷。按照慣例,像 a == b 這樣的表達式會翻譯成:
a?.equals(b) ?: (b === null)也就是說如果 a 不是 null 則調(diào)用 equals(Any?) 函數(shù),否則(即 a 是 null )檢測 b 是否與 null 引 用相等。
請注意,當(dāng)與 null 顯式比較時完全沒必要優(yōu)化你的代碼:a == null 會被自動轉(zhuǎn)換為 a === null
如需提供自定義的相等檢測實現(xiàn),請覆蓋 equals(other: Any?): Boolean 函數(shù)。名稱相同但簽名不同的函數(shù),如 equals(other: Foo) 并不會影響操作符 == 與 != 的相等性檢測
結(jié)構(gòu)相等與 Comparable<......> 接口定義的比較無關(guān),因此只有自定義的 equals(Any?) 實現(xiàn)可能會影響該操作符的行為。
浮點數(shù)相等性
當(dāng)相等性檢測的兩個操作數(shù)都是靜態(tài)已知的(可空或非空的)Float 或 Double 類型時,該檢測遵循 IEEE 754 浮點數(shù)運算標準
否則會使用不符合該標準的結(jié)構(gòu)相等性檢測,這會導(dǎo)致 NaN 等于其自身,而 -0.0 不等于 0.0 。
引用相等
引用相等由 ===(以及其否定形式 !==)操作判斷。a === b 當(dāng)且僅當(dāng) a 與 b 指向同一個對象時求值為 true。對于運行時表示為原生類型的值(例如 Int),=== 相等檢測等價于 == 檢測。
分享題目:kotlin更多語言結(jié)構(gòu)——>相等性-創(chuàng)新互聯(lián)
鏈接地址:http://ef60e0e.cn/article/cohjds.html