为什么重写equals方法必须要重写hashCode方法

为什么重写equals时必须要重写hashCode方法


首先让我们看一下关于hashCode的规定:

  1. 对象相等,hashCode一定相等

  2. 对象不相等,hashCode可能相等

  3. hashCode相等,对象不一定相等

  4. hashCode不相等,对象一定不相等

看完上面的规定,让我们看一下下面的代码

A a1 = new A("hello");
A a2 = new A("hello");
a1.equals(a2);

在重写了equals的情况下,上述代码返回的是true,根据规定此时的hashCode一定是相等的,矛盾就产生了。

hashCode 是根据对象的内存地址经过哈希算法获得的,上述代码的对象是不相等的,hashCode的结果应该有可能是相等也有可能是不相等的(不一定相等)。

但是上述代码的结果是true则会导致hashCode的结果一定相等,这就与第二段中提到的不一定相等产生矛盾,因此重写equals时必须重写hashCode方法。

你可能感兴趣的:(java,开发语言)