📜  Java重写equals方法(1)

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

Java重写equals方法

在Java中,Object类提供了默认的equals方法,但该方法比较的是对象的引用,而不是对象的属性值。如果需要比较两个对象的属性值,就需要重写equals方法。

重写equals方法的步骤
  • 重写equals方法时,需要遵守以下规则:

    • 对称性:如果a.equals(b)返回true,则b.equals(a)也应该返回true。
    • 自反性:a.equals(a)应该返回true。
    • 传递性:如果a.equals(b)返回true,b.equals(c)返回true,则a.equals(c)也应该返回true。
    • 一致性:如果a.equals(b)返回true,在比较a和b的属性值时,每次都应该得到相同的结果。如果在比较中使用的属性值发生变化,则equals方法的返回值也应该相应地发生变化。
    • 非空性:a.equals(null)应该返回false。
  • 通常情况下,可以按照以下步骤来重写equals方法:

    1. 检查传入的对象是否为null,如果为null则返回false;
    2. 检查传入的对象是否为该对象的引用,如果是,则返回true;
    3. 检查传入的对象是否属于该对象所属的类,如果不是,则返回false;
    4. 将传入的对象转换为该对象所属的类类型;
    5. 对比该对象和传入对象的属性值,如果不相同,则返回false;
    6. 如果以上所有条件都不满足,则返回true。
举例说明
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (this == o) {
            return true;
        }
        if (getClass() != o.getClass()) {
            return false;
        }
        Person p = (Person) o;
        return this.age == p.age && Objects.equals(this.name, p.name);
    }
}

在上面的例子中,我们创建了一个Person类,并重写了它的equals方法。在比较两个Person对象时,我们只需要比较它们的name和age属性值是否相等即可。

总结

重写equals方法是Java面向对象编程的重要内容之一,在实际开发中常常用到。通过本文的介绍,我们学习了重写equals方法的步骤和规则,并且通过实例编写了一个重写了equals方法的Person类。希望本文能对Java程序员们有所帮助。