如果一个对象equals另一个对象,那么他们的hashcode一定相同?


选择答案:
A 是的,一定相同 
B 不一定相同 

根据规则:
java.lnag.Object中对hashCode的约定:
1.在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
2.如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
3.如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。

感觉应该是A,不知道正确答案是?

15 个解决方案

#1


感觉看这几点规则应该是A

#2


规则只是规则
现实中很多人不遵守规则,所以这个问题不好回答

#3


不是.只不过Object默认实现是这样而已.
但是如果覆写过equals(..)方法,那就不一定了.

#4


如果按照规范来做应该选 A

#5


引用 4 楼 pwl2014 的回复:
如果按照规范来做应该选 A

I also think so.

#6


是规则,不一定非得相同。

#7


呵呵,理论上是A,无论是核心JAVA还是高效Java中都提到,如果定义了equals方法,那么一定要改写hashCode方法,保证equals为真时,hashcode要相等。

#8


引用 7 楼 wang511123 的回复:
呵呵,理论上是A,无论是核心JAVA还是高效Java中都提到,如果定义了equals方法,那么一定要改写hashCode方法,保证equals为真时,hashcode要相等。

up

#9


原则上应该要相同。

#10


不能很好的理解了,理论上和原则上真的不好区分

#11


不一定相同啊..只能说有可能相同..有可能不同...

#12


规范要求相同,但是实际并不一定相同,hashCode和equals只是两个方法,你可以按照自己的意愿任意的重写它们。

#13


引用 7 楼 wang511123 的回复:
呵呵,理论上是A,无论是核心JAVA还是高效Java中都提到,如果定义了equals方法,那么一定要改写hashCode方法,保证equals为真时,hashcode要相等。


就是这样的

#14


引用 7 楼 wang511123 的回复:
呵呵,理论上是A,无论是核心JAVA还是高效Java中都提到,如果定义了equals方法,那么一定要改写hashCode方法,保证equals为真时,hashcode要相等。

up

#15


up
理论上要求相同,实际就不一定了
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告