java中为什么重写equals方法一定要重写hashcode方法

  1. 因为如果我们在重写equals方法的同时,不对hashcode方法进行重写的话,默认地还是会使用Object类自带的hashcode方法,这样就会出现在某些情况下,明明两个对象的equals方法判断相等了,但是它们的hashcode居然不一样,这是不符合规范的。对于hashcode,Java中有如下规定:
    两个对象相等,hashcode一定相等
    两个对象不等,hashcode不一定不等
    hashcode相等,两个对象不一定相等
    hashcode不等,两个对象一定不等
  2. hashcode经常用于散列数据的快速存取,例如在使用hash类数据集合时,都是先根据存储的对象的hashcode值去判断对象是否相同,因此如果不重写hashcode方法的话,会导致判断对象相同的时候,明明equals方法判断相等了,hashcode却判断不相等,就会造成在不同的位置中可以存放两个相同的对象,这就不合理了。

猜你喜欢

转载自blog.csdn.net/qq_37856300/article/details/88813842