Kotlin 和 Java 中相等判断的区别
Java 中的相等判断
操作符 ==
- 如果是基本数据类型比较的是值是否相等
- 如果是引用数据类型比较的是内存地址是否相同
equals() 方法
-
默认情况下在不重写 equals()
方法时,等价于 ==
-
重写 equals()
方法时,常用于比较对象的结构是否相等,可以通过快捷键自动生成 equals()
、hashCode()
、 toString()
等等方法。
public class Person {
private String name;
private String age;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
Kotlin 中的相等判断
在 Kotlin 中有两种类型的相等判断:
- 结构相等 (
==
- 检查 equals()
)
- 引用相等 (
===
- 判断两个引用是否指向同一个对象)
-
Kotlin 中的操作符 ==
等价于 equals()
用于比较对象的结构是否相等, 很多情况下使用的是 ==
,因为对于浮点类型 Float 和 Double,其实现方法 equals()
并不遵循 IEEE 754 浮点运算标准。
fun main() {
val a:Float = 0f
val b:Float = -0f
println("${a==b}") // true
println("${a.equals(b)}") // false
}
-
比较对象的引用是否相等 ( ===
) ,如果是基本数据类型 ===
等价于 ==
。
-
与 Java
相同,Any.equals()
函数比较的是两个对象的引用是否相等。也就是说,如果没有覆盖 equals()
函数,== 与 === 的结果是相同的。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。