📅  最后修改于: 2023-12-03 15:27:13.339000             🧑  作者: Mango
在Java中,equals()方法用于比较两个对象是否相等。它是Object类的一个方法,子类可以选择覆盖它来提供更精细的相等评估。
以下是equals()方法的语法:
public boolean equals(Object obj)
在编写equals()方法之前,需要理解以下原则:
自反性:对于任意非null的引用值x,x.equals(x)应该返回true。
对称性:对于任意非null的引用值x和y,如果x.equals(y)返回true,则y.equals(x)也应该返回true。
传递性:对于任意非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,则x.equals(z)也应该返回true。
一致性:对于任意非null的引用值x和y,只要equals()方法中所用的信息没有被修改,无论调用x.equals(y)多少次,都应该返回true或者false。
非空性:对于任意非null的引用值x,x.equals(null)必须返回false。
实现equals()方法需要满足以上原则。
以下是一个示例,演示如何实现自定义类的equals()方法。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof Person)) return false;
Person otherPerson = (Person) obj;
return this.name.equals(otherPerson.name) && this.age == otherPerson.age;
}
}
public class Demo {
public static void main(String[] args) {
Person p1 = new Person("John", 30);
Person p2 = new Person("John", 30);
Person p3 = new Person("Mary", 25);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.equals(p3)); // false
}
}
在上面的例子中,我们创建了一个自定义类Person,并覆盖了它的equals()方法。然后,在main()方法中创建了三个Person对象,并比较它们之间的相等性。
在equals()方法中,首先处理了自反性的情况,如果obj引用了this对象,直接返回true。然后判断obj是否是Person类的实例,如果不是,返回false。最后,比较name和age两个属性的值,如果相等,返回true,否则返回false。
equals()方法在Java中非常重要,因为它们可以用来比较不同对象之间的相等性。当编写自定义类时,需要实现equals()方法,以便可以根据对象的属性来比较它们的相等性。在实现equals()方法时,需要注意满足原则。