equals()方法的要求:
- 自反性:对于任何非空的引用x,x.equals(x)都应该返回true;
- 对称性:对于任何引用x和y,当且仅当x.equals(y)返回true时,y.equals(x)也应该返回true;
- 传递性:对于任何引用x、y、z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
- 一致性:如果x和y的引用没有发生变化,那么反复调用x.equals(y)的结果应该相同;
- 对于任何非空的引用x,x.equals(null)应该返回false。
下面看一个例子:
public class AnExampleClass {
private int age;
private String name;
@Override
public boolean equals(Object object) {
if (object == this) {
return true;
}
if (object == null) {
return false;
}
if (!(object instanceof AnExampleClass)) {
return false;
}
AnExampleClass other = (AnExampleClass) object;
return other.age == age && other.name.equals(name);
}
}
记住,如果你重写了equals()方法,那么一定要重写hashCode()方法!hashCode()有一种简单的写法如下:
@Override
public int hashCode() {
return Object.hash(age, name);
}