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


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() 方法,以确保这两个方法始终满足上述两个约定。这有助于维护对象在哈希表等数据结构中的正确行为。



为什么很多软件取消了网页版?

请你谈谈Java 8的新特性有哪些

获取更多资讯请加入交流群


    协助本站SEO优化一下,谢谢!
    关键词不能为空
评 论
更换验证码