一、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(不同对象)