在 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()
方法的一個封裝和簡化。