在 Kotlin 中,== 和 === 兩種操作符用於比較對象,但它們的用途和行為有重要的區別:
==(內容相等)用途:== 在 Kotlin 中用於比較兩個對象的內容或值是否相等。實際是等價於 java 的 equals() 方法,實際上在內部也是直接調用 equals()。
行為:當你使用 == 來比較兩個對象時,Kotlin 內部會檢查這兩個對象是否內容是否相同。
範例:
class Person(val name: String, val age: Int)
val a = Person("Alice", 25)
val b = Person("Alice", 25)
println(a == b) // true
===(參考相等)用途:=== 用於比較兩個對象的引用是否相同,即它們是否指向內存中的同一個位置。
行為:這種比較不涉及到對象內容的比較,只是簡單地檢查兩個對象的引用 address 是否一致。即使兩個對象內容完全相同,但它們在內存中的位置不同,=== 比較的結果也是 false。
範例:
val a = Person("Alice", 25)
val b = a
val c = Person("Alice", 25)
println(a === b) // true,因為 b 是 a 的一個引用
println(a === c) // false,儘管 c 和 a 的內容相同,但它們是不同的對象實例
== 時,你在比較兩個對象的“內容”是否相等。=== 時,你在比較兩個對象的“參考”是否相同。這種區分在很多編程語言中都存在(如 JavaScript 的 == vs ===),而在 Java 中,== 用於基本數據類型的值比較和引用類型的引用比較,對象內容比較則通過 .equals() 方法實現,Kotlin 的 == 實質上是對 Java 的 .equals() 方法的一個封裝和簡化。