java中equals方法
Java中的equals方法是用于比较两个对象是否相等的方法。在Java中,所有的类都继承自Object类,而Object类中的equals方法是用于比较两个对象是否指向同一个内存地址的方法。因此,在自定义类中需要重写equals方法来实现对对象属性值的比较。
一、equals方法的基本概念
1.1 equals方法的作用
equals方法是Java中用于比较两个对象是否相等的方法。
1.2 equals方法的返回值
equals方法返回一个布尔值,如果两个对象相等则返回true,否则返回false。
1.3 equals方法与==运算符的区别
==运算符比较两个变量或表达式是否指向同一个内存地址,而equals方法比较两个对象是否具有相同的属性值。
二、重写equals方法的步骤
2.1 确定比较规则
在重写equals方法之前,需要确定比较规则。通常情况下,我们会将每个属性都进行比较,如果每个属性都相等,则认为两个对象相等。
2.2 判断传入参数类型
由于Object类中定义了一个没有参数和返回值类型为boolean的equals() 方法,因此在重写该方法时需要判断传入参数类型是否为当前类或其子类类型。如果不是,则直接返回false。
2.3 判断传入参数是否为空或与当前对象指向同一内存地址
当传入参数为空时,直接返回false。当传入参数与当前对象指向同一内存地址时,直接返回true。
2.4 判断传入参数属性值是否相等
对于每个属性值进行比较,如果所有属性值都相等,则返回true。否则返回false。
三、equals方法的示例代码
下面是一个简单的示例代码:
public class Person {
    private String name;
    private int age;
   
    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    equals()方法
    // 重写equals方法
    @Override
    public boolean equals(Object obj) {
        // 判断传入参数类型是否为Person类或其子类类型
        if (!(obj instanceof Person)) {
            return false;
        }
       
        // 判断传入参数是否为空或与当前对象指向同一内存地址
        if (obj == null || obj == this) {
            return true;
        }
       
        // 判断传入参数属性值是否相等
        Person person = (Person) obj;
        return this.name.equals(person.name) && this.age == person.age;
    }
}
在上述代码中,我们重写了Person类的equals方法。首先判断传入参数类型是否为Person类或其子类类型,然后判断传入参数是否为空或与当前对象指向同一内存地址,最后对比较规则进行比较。
四、equals方法的注意事项
4.1 equals方法必须满足自反性、对称性、传递性和一致性
自反性:任何非空引用x,x.equals(x)必须返回true。
对称性:任何非空引用x和y,如果x.equals(y)返回true,那么y.equals(x)也必须返回true。
传递性:任何非空引用x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,则x.equals(z)也必须返回true。