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() 比较值相等
== 比较值和引用都相等
但 Object.equals() 比较的是引用,所有继承了 Object 的对象,如果没有重写equals() 方法,也是比较引用
一般重写equals() 是为了只比较值是否相等
如果 Identify ,则一定Equality
如果Equality,则hashcode一定相等
@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);
}
@Override
public int hashCode() {
return Objects.hash(name, yearOfBirth);
}
网友评论