为什么重写 equals 时必须重写 hashCode 方法?
-
如果equals()比较对象的内容相同时,则HashCode一定相等。
-
如果两个对象的HashCode相等,那么他们的equals()不一定相等。
public static void main(String[] args) {
Integer IntA=97;
String a="a";
System.out.println(IntA.hashCode());//97
System.out.println(a.hashCode());//97
System.out.println(a.equals(IntA));//false
}
- 重写之前的equals()源代码用的是==比较,比较的是地址,所以当equals()相同时,hashcode一定相同。
public boolean equals(Object obj) {
return (this == obj);
}
- 重写后的equals()函数比较的是内容,hashcode()不一定相同,为了遵循第一条和第二条准则,需要重写hashcode(),使他们也拥有一样的hashcode()。