Equals() and Hashcode() in Java

2025 年 3 月 28 日 | 阅读 3 分钟

equals() 和 hashcode() 是 Object 类提供的两个重要方法,用于比较对象。由于 Object 类是所有 Java 对象的父类,因此所有对象都继承了这两个方法的默认实现。在本主题中,我们将详细介绍 equals() 和 hashcode() 方法,它们之间的关系,以及如何在 Java 中实现这两个方法。

Java equals()

  • java equals() 是 lang.Object 类的一个方法,用于比较两个对象。
  • 要比较两个对象是否相同,它会比较这两个对象属性的值。
  • 默认情况下,只有当两个对象存储在同一内存位置时,它们才被认为是相同的。

语法

参数

obj:它接受引用对象作为参数,我们需要将其与当前对象进行比较。

返回值

如果两个对象相同,则返回 true,否则返回 false。

equals() 方法的一般约定

Java SE 定义了一些通用原则,在 Java 中实现 equals() 方法时必须遵循。equals() 方法必须是

  • 自反性:对象 x 必须等于自身,这意味着,对于对象 x,equals(x) 应返回 true。
  • 对称性:对于两个给定的对象 x 和 y,x.equals(y) 当且仅当 y.equals(x) 返回 true 时,才应返回 true。
  • 传递性:对于任何对象 x、y 和 z,如果 x.equals(y) 返回 true 且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
  • 一致性:对于任何对象 x 和 y,x.equals(y) 的值不应改变,除非 equals() 中的属性发生改变。
  • 对于任何对象 x,equals(null) 必须返回 false。

Java hashcode()

  • hashcode 是 Java 中与每个对象关联的整数值,有助于在哈希表中进行哈希处理。
  • 要获取对象的 hashcode 值,我们可以使用 Java 中的 hashcode() 方法。它是 hashcode() 方法返回给定对象的整数 hashcode 值
  • 由于此方法定义在 Object 类中,因此用户定义的类也继承了它。
  • 对于根据 equals() 方法相等的两个对象,调用 hashcode() 方法会返回相同的哈希值。如果对象不相等,它通常会返回不同的哈希值。

语法

返回值

它返回给定对象的哈希码值。

Java 中 hashcode() 方法的约定

  • 如果根据 equals(Object) 方法,两个对象是相同的,那么当我们分别调用这两个对象的 hashCode() 方法时,它必须提供相同的整数结果。
Equals() and Hashcode() in Java

注意:根据 Java 文档,为了获得完整的相等机制,两个方法都应该被重写;仅使用 equals() 是不够的。这意味着,如果我们重写 equals(),我们也必须重写 hashcode() 方法。

示例

输出

a & b are equal variables, and their respective hash values are: 1965574029 & 1965574029

c & d are Un-equal variables, and their respective hash values are: 74113750 & 71933245

在上面的示例中,我们定义了四个变量,其中两个相等,两个不相等。首先,我们比较对象是否相等或不相等,并根据此打印它们的哈希值。