一、Kotlin 中的區別
==
(雙等于) - 結構相等性檢查比較兩個對象的內容是否相等(相當于調用?
equals()
?方法)。自動處理?
null
?安全:a == b
?等價于?a?.equals(b) ?: (b === null)
。示例:
val s1 = "Hello" val s2 = String("Hello".toCharArray())println(s1 == s2) // true(內容相同)
===
(三等于) - 引用相等性檢查比較兩個變量是否指向同一個內存地址(同一個對象實例)。
示例:
val s1 = "Hello" val s2 = String("Hello".toCharArray())println(s1 === s2) // false(不同對象實例)
二、Java 中的區別
==
(雙等于) - 引用相等性檢查對引用類型:比較兩個對象的內存地址(是否同一個實例)。
對基本類型(如?
int
,?char
):比較值是否相等。示例:
String s1 = "Hello"; String s2 = new String("Hello");System.out.println(s1 == s2); // false(不同對象實例)
沒有?
===
?操作符Java 不支持?
===
,內容相等需顯式調用?equals()
?方法:System.out.println(s1.equals(s2)); // true(內容相同)
三、關鍵區別總結
操作符 | Kotlin | Java |
---|---|---|
== | 內容相等(自動調用?equals() ) | 引用類型:內存地址;基本類型:值 |
=== | 內存地址相等(引用相同) | 不存在(用?== ?替代) |
使用場景
Kotlin:
需要比較內容時用?
==
(如字符串、集合)。需要檢查是否為同一對象時用?
===
(如單例、枚舉)。
Java:
比較內容時必須用?
equals()
。檢查內存地址用?
==
。
四、示例對比
// Kotlin
val a: String? = "Hi"
val b: String? = "Hi"
val c: String? = String("Hi".toCharArray())println(a == b) // true(內容相同)
println(a === b) // true(編譯器優化,指向同一常量)
println(a === c) // false(不同對象)
// Java
String a = "Hi";
String b = "Hi";
String c = new String("Hi");System.out.println(a.equals(b)); // true(內容相同)
System.out.println(a == b); // true(常量池同一對象)
System.out.println(a == c); // false(不同對象)