谈谈hashCode()和equals()的区别

Java面试 潘老师 9个月前 (09-01) 182 ℃ (0) 扫码查看

Java面试题:请你谈谈hashCode()和equals()的区别是什么?为什么重写equals()就要重写hashCode()?

得分点:hashCode() 用途,equals() 用途,hashCode()、equals() 约定

标准回答:

在Java中,hashCode() 方法的主要用途是获取对象的哈希码,而 equals() 方法主要用来比较两个对象是否相等。这两个方法之间存在两个约定:

  1. 约定一:相等对象必须具有相同的哈希码
    • 如果两个对象被认为相等,那么它们必须具有相同的哈希码。这意味着如果 equals() 方法返回 true,那么这两个对象的 hashCode() 值也必须相等。
  2. 约定二:相等的哈希码不一定表示相等的对象
    • 两个对象的哈希码相等不一定意味着这两个对象相等。换句话说,如果两个对象的 hashCode() 值相等,它们仍然需要通过 equals() 方法进行进一步的比较来确定是否相等。

另外,需要注意的是,默认情况下,Object 类提供的 equals() 方法使用 == 运算符来比较两个对象,即只有两个对象是同一个对象时,才会返回相等的结果。然而,在实际业务中,通常的需求是,如果两个不同的对象的内容相同,就应该认为它们相等。因此,通常需要重写 equals() 方法,以满足业务需求。

由于 hashCode() 方法与 equals() 方法具有联动关系,因此在重写 equals() 方法时,通常也需要重写 hashCode() 方法,以确保这两个方法始终满足上述两个约定。这有助于维护对象在哈希表等数据结构中的正确行为。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8578.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】