什么时候重写hashcode与equals

本文探讨了Java中何时需要重写对象的hashCode和equals方法。原生的hashCode返回内存地址,equals比较内存地址。重写equals通常用于比较实例属性是否相等,而重写hashCode适用于自定义类型作为HashMap的key,以避免逻辑重复并提高性能。通过示例和验证过程,展示了不重写或只重写其中一个方法可能导致的问题,以及正确重写后如何确保HashMap正确识别重复key。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本文的所有验证在文章最后

如果您愿意相信我的话,请静下心来,慢慢阅读,一定会解除您心中的些许疑惑

 

一、原生的hashCode与equals是什么样的

原生hashCode值为内存地址(未考正)

原生equals比较的是内存地址

二、什么时候重写equals?

答:比较两个实例是否相等时重写equals()。

equals()用于比较两个实例是否相等,两实例属性对应相等    =>    两实例相等

只单纯比较两个同类型实例是否相等时只重写equals()就可以。作者觉得  "为什么重写equals()一定要重写hashCode”这种标题并不合理。

三、什么时候重写hashCode?

答:自定义类型作为HashMap的key

我相信还有其他情况需要重写hashCode,作者愚笨,暂时还不了解其他的情况,请谅解。

四、重写hashCode与equals的例子

自定义类型作为HashMap的key,没错,这也是重写hashCode的原因。

讲解如下:

1.HashMap不允许key重复的含义:

请先明确:即使您未重写hashCode与equals,自定义类型作为HashMap的key,从代码上是完全被允许的。

HashMap中不允许key重复指的是逻辑重复,下图中的这种逻辑是不被允许的,但这种逻辑是存在的(不重写hashCode和equ

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值