- 两个对象 equals 相等,那他们 hashCode 一定也相等
- 两个对象 hashCode 相等,那他们 equals 不一定相等
为什么重写equals后要重写hashCode
关于这个问题网上有很多,但是我这边还是想用我自己的观点说一下。
- hashCode主要作用在于使用HashMap或HashSet时映射到具体的桶上使用的;
- 重写equals后,若不重写hashCode,会导致两个相同的key在hashMap中是两个不同的key; ```java // person类重写了equals Person p1=new Person(1,”aa”); Person p2=new Person(1,”aa”); hashMap.put(p1,1); // 由于p1和p2的hashCode不一样,所以不一定映射到相同的桶中。所以取不到值 // 但是业务逻辑上,重写了equals,是想让hashMap认为p1,p2是同一个key值的, // 所以必定要重写hashCode,让 p1.equals(p2) == true时, p1和p2的hashCode也相等即可 hashMap.get(p2); //大概率拿不到值
```