hashCode()相同,equals()一定是true吗

参考答案

不一定。

反之,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吗】的参考答案。

相关面试题:

HashCode有什么作用

equals和hashCode的区别,以及联系

为什么重写equals就要重写hashCode

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧