📅  最后修改于: 2023-12-03 14:42:56.621000             🧑  作者: Mango
在Java中,equals()方法是用来比较两个对象是否相等的方法。对象相等的定义取决于对象类型和应用程序所定义的相等性。
public boolean equals(Object obj)
该方法比较当前对象与指定对象的值是否相等。如果对象相等,则返回true,否则返回false。如果两个对象是同一类型并具有相同的实例字段值,则认为这两个对象相等。在大多数情况下,应该重写这个方法以实现适当的逻辑相等性。
假设有一个名为Person.java的类,其中包含以下实例字段:
public class Person {
private String name;
private int age;
private String address;
// 省略构造方法和其他方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
if (age != person.age) return false;
if (name != null ? !name.equals(person.name) : person.name != null) return false;
return address != null ? address.equals(person.address) : person.address == null;
}
// 省略hashCode()方法
}
该类重写了equals()方法,以检查name、age和address三个实例字段的值是否相等。
现在,我们可以创建两个Person对象并比较它们是否相等:
public static void main(String[] args) {
Person person1 = new Person("Tom", 20, "Shanghai");
Person person2 = new Person("Tom", 20, "Beijing");
System.out.println(person1.equals(person2));
}
上述示例中,person1和person2都有相同的名称和年龄,但不同的地址。由于我们只比较名称和年龄,因此该程序输出结果为true。
equals()方法是重写很常见的一个方法。我们应该根据对象的类型和应用程序的相等性来定义适当的逻辑相等性。在任何时候都应该小心,确保重写equals()方法时不会破坏hashCode()方法的契约,因为这可能导致哈希表等数据结构的不正确行为。