为什么在重写了equals方法之后也必须重写hashcode方法

 我来答
京北红日
2017-11-07 · TA获得超过236个赞
知道小有建树答主
回答量:263
采纳率:91%
帮助的人:122万
展开全部
重写hashCode()时最重要的原因就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值。如果在将一个对象用put()方法添
加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个
hashCode()值,那么就无法重新取得该对象了。所以,如果你的hashCode()方法依赖于对象中易变的数据,那用户就要小心了,因为此数据发
生变化时,hashCode()就会产生一个不同的hash码,相当于产生了一个不同的“键”。

Object的hashCode()方法,返回的是当前对象的内存地址。下次如果我们需要取一个一样的“键”对应的键值对的时候,我们就无法得到一样的 hashCode值了。因为我们后来创建的“键”对象已经不是存入HashMap中的那个内存地址的对象了。

我们看一个简单的例子,就能更加清楚的理解上面的意思。假定我们写了一个类:Person (人),我们判断一个对象“人”是否指向同一个人,只要知道这个人的身份证号一直就可以了。
七八三十六
2018-07-30
知道答主
回答量:12
采纳率:0%
帮助的人:9746
展开全部

我认为首先要认清equals方法和hashcode方法是用来干嘛的,然后这两个方法之间什么关系就够了为什么重写equals()就一定要重写hashCode()方

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式