选择答案:
A 是的,一定相同
B 不一定相同
根据规则:
java.lnag.Object中对hashCode的约定:
1.在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
2.如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
3.如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
感觉应该是A,不知道正确答案是?
15 个解决方案
规则只是规则
现实中很多人不遵守规则,所以这个问题不好回答
不是.只不过Object默认实现是这样而已.
但是如果覆写过equals(..)方法,那就不一定了.
呵呵,理论上是A,无论是核心JAVA还是高效Java中都提到,如果定义了equals方法,那么一定要改写hashCode方法,保证equals为真时,hashcode要相等。
不一定相同啊..只能说有可能相同..有可能不同...
规范要求相同,但是实际并不一定相同,hashCode和equals只是两个方法,你可以按照自己的意愿任意的重写它们。