A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 方志亮 中级黑马   /  2012-9-12 11:18  /  2441 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
求详细的解释

4 个回复

倒序浏览
一、要知道,涉及到hash算法的,重写equals方法,必须重写hashcode方法;否则,equals即使等了,hashcode不等,他们也不会相等。
二、但没有涉及到hash算法的,可以不考虑hashCode方法,就能判断他们是否相等。
三、“两个对象值相同(x.equals(y) == true),但却可有不同的hash code”这句话,问的是“可以有吗?”可以,是因为没有涉及到hash算法;不可以,是因为不能保证这两个对象没有涉及到hash算法。

方兄,我认为这个答出知识点就可以了,这个题问的有歧义啊。有歧义的面试题也正常,不管回答什么,答出知识点就行了。
回复 使用道具 举报
张 涛 发表于 2012-9-12 11:29
一、要知道,涉及到hash算法的,重写equals方法,必须重写hashcode方法;否则,equals即使等了,hashcode不 ...

好的  谢谢了
回复 使用道具 举报
要想hashCode有价值,对象必须存在HashSet集合中。
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中那些参与计算哈希值的字段了,
否则对象修改后的哈希值与最初存储进HashSet集合中时的值就不同了,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。
回复 使用道具 举报
对。
如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。
如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马