📜  Java中的构造函数equals()方法和示例(1)

📅  最后修改于: 2023-12-03 15:02:02.772000             🧑  作者: Mango

Java中的构造函数equals()方法和示例

介绍

在Java中,每个类都有一个默认的equals()方法,用于比较对象的相等性。这个默认的方法只比较两个对象是否是同一个对象(即是否引用同一个内存地址),而不是比较它们的属性是否相等。因此,在我们自定义的类中,需要自己来实现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()方法比较字符串的内容,才能得到正确的结果。