📅  最后修改于: 2023-12-03 15:02:02.772000             🧑  作者: Mango
在Java中,每个类都有一个默认的equals()方法,用于比较对象的相等性。这个默认的方法只比较两个对象是否是同一个对象(即是否引用同一个内存地址),而不是比较它们的属性是否相等。因此,在我们自定义的类中,需要自己来实现equals()方法,以便比较对象的属性是否相等。
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof MyClass)) {
return false;
}
MyClass other = (MyClass) obj;
// 对象的属性进行比较,如果相等则返回true,否则返回false
// 注意,需要使用equals()方法比较字符串的相等性,不能直接使用“==”比较
}
上面的代码展示了equals()方法的基本格式。首先比较两个对象是否引用同一个内存地址,如果是,则认为它们相等。然后,判断传入的参数是否为当前类的一个对象,如果不是,则返回false。接着,将传入的对象强制转换为当前类的一个对象,并比较它们的属性是否相等,如果相等,则返回true,否则返回false。
下面是一个自定义类的示例,它包含两个属性:姓名和年龄。
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 other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
public static void main(String[] args) {
Person p1 = new Person("张三", 20);
Person p2 = new Person("李四", 25);
Person p3 = new Person("张三", 20);
System.out.println(p1.equals(p2)); // false
System.out.println(p1.equals(p3)); // true
}
}
上面的代码创建了三个Person对象,并比较它们的相等性。可以看到,p1和p2的姓名和年龄都不相等,因此它们的equals()方法返回false;而p1和p3的姓名和年龄都相等,因此它们的equals()方法返回true。
注意,在实现equals()方法时,需要特别注意字符串比较的方式。由于字符串是引用类型,如果使用“==”比较两个字符串,比较的是它们的引用,而不是它们的内容。因此,我们需要使用equals()方法比较字符串的内容,才能得到正确的结果。