参考答案
不一定。
反之,equals() 为true,hashCode() 也不一定相同。
原因:
- 类的 hashCode() 方法和 equals() 方法都可以重写,返回的值完全在于自己定义。
- hashCode() 返回该对象的哈希码值;equals() 返回两个对象是否相等。
hashCode() 和 equals() 的常规协定:
- 两个对象用 equals() 比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,以提高哈希表性能;
- 两个对象用 equals() 比较返回true,两个对象的hashCode()方法必须返回相同的结果;
- 重写 equals() 方法,必须重写 hashCode() 方法,以保证 equals() 方法相等时两个对象 hashcode() 返回相同的值。
举个例子:
吃饭是你的能力,但吃得过多就容易吃撑,影响健康。重写 equals 和 hashCode 方法返回是否为 true是你的能力。但是,如果不按照上述协议进行控制,在用到对象 hash 和 equals 逻辑判断相等时,就会出现意外情况,例如, HashMap的key是否相等。
以上,是Java面试题【hashCode()相同,equals()一定是true吗】的参考答案。
相关面试题:
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—