Java 比较相等
2018-09-03 本文已影响9人
07120665a058
- Java Equals() 特性
1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5、对于任何非空引用值 x,x.equals(null) 都应返回 false。
- Equals() 和 == 的区别
equals() 比较值相等
== 比较值和引用都相等
但 Object.equals() 比较的是引用,所有继承了 Object 的对象,如果没有重写equals() 方法,也是比较引用
一般重写equals() 是为了只比较值是否相等
如果 Identify ,则一定Equality
如果Equality,则hashcode一定相等
- 重写Equals方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
OtherClass klass = (OtherClass) obj;
return name.equals(klass.name);
}
- 重写HashCode方法
@Override
public int hashCode() {
return Objects.hash(name, yearOfBirth);
}