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()
函数,== 与 === 的结果是相同的。