jdk注释规范说到:
1、equals相等,则hashCode必须相等(equals不相等,hashCode有可能相等)
所以,重写了equals,一般来说都需要重写hashCode方法来满足同等性。
2、如果equals相等,hashCode不相等会发生什么?
那么用到hashCode来判断相等的散列映射就会出错!!
HashTable、HashMap、HashSet等基于hashCode(哈希散列)的方法来判断对象相等,就算equals相等,如果hashCode不相等,直接被判定为不相等,两个对象在哈希列表中相等前提是hashCode相等,然后在判断equals相等。
证明:
第一种:
定义User类并都重写equals和hashCode方法(正确做法):
public class User {
public User(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
private String userName;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;