1 如果两个对象相等,那么hashcode也一定是相同的。
2 如果两个对象的hashcode相同,那么两个对象不一定相等。因此,如果equals方法被重写,则一定要重写hashcode方法
3 两个对象相等,对两个对象都调用equals返回true
4 hashcode默认是对堆中的对象产生独特的值,如果没有重写hashcode,则该class的两个对象无论如何都不会相等。即使这两个对象指向相同的数据。
扩展:
Q: 重写equals方法时为什么要重写hashcode方法?
A: 如果只重写 equals 方法而不去重写 hashCode,就可能导致 a.equals(b) 这个表达式成立,但是 a 和 b 的hashcode却不同,那么这个只重写了 equals 的对象在使用散列集合进行存储的时候,就会出现问题,因为散列集合是使用hashcode来计算key的存储位置,如果存储两个完全相同的对象,但是hashcode不同,就会导致这两个对象存储在hash表的不同位置,当我们想要根据这个对象去获取数据的时候就会出现一个悖论,一个完全相同的对象会存储在hash表的两个位置,这可能会使我们的程序中出现一些不可预料的错误。