为什么重写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方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值