📅  最后修改于: 2023-12-03 15:21:37.788000             🧑  作者: Mango
在 Java 中,Object 类是所有类的父类。它包含了一些非常基础的方法,其中包括 equals(Object)
和 hashCode()
方法。但是,这两个方法可能无法满足我们实际的需要,因为它们默认的行为比较简单,可能不能正确地处理我们的数据类型。
为了解决这个问题,我们通常会覆盖 equals(Object)
和 hashCode()
方法,以便它们能够正确地比较我们的对象,并在需要时正确地运行。
equals()
方法是用于比较两个对象是否相等的方法。然而,默认情况下它仅仅是比较两个对象的引用是否相等,而非实际的属性值是否相等。因此,我们需要覆盖该方法,以确保比较的是对象的实际内容,而不只是引用。
在覆盖该方法时,我们通常需要考虑以下几个方面:
equals()
方法,按照实际的需求进行判断。以下是一个简单的示例:
public class Employee {
private String name;
private int age;
// 构造方法,getter 和 setter 略去
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof Employee)) {
return false;
}
Employee e = (Employee) o;
return age == e.age && Objects.equals(name, e.name);
}
}
hashCode()
方法用于返回对象的哈希码值。哈希码是一个整数,有以下两个特点:
在覆盖该方法时,我们同样需要考虑对象的实际内容,而不是默认的引用值。我们通常会重写 hashCode()
方法,以使用对象的属性计算一个综合的哈希值。
以下是一个示例:
public class Employee {
private String name;
private int age;
// 构造方法,getter 和 setter 略去
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
覆盖 equals(Object)
和 hashCode()
方法能够确保对象被正确比较和哈希。使用默认的 Object 类实现会导致不正确的比较和哈希,因此它们不适用于大多数具体的对象类型。