java中equals方法的重写
时间: 2023-08-29 22:08:28 浏览: 51
在Java中,equals()方法是Object类的一个实例方法,用于比较两个对象是否相等。默认情况下,equals()方法比较的是两个对象的引用地址,即是否指向同一个对象。如果我们需要比较对象的属性值是否相等,就需要重写equals()方法。
为了重写equals()方法,我们需要遵循以下规则:
1. 对称性:如果a.equals(b)返回true,那么b.equals(a)也应该返回true。
2. 反射性:对于任何非null的引用值x,x.equals(x)应该返回true。
3. 传递性:如果a.equals(b)返回true,b.equals(c)返回true,那么a.equals(c)也应该返回true。
4. 一致性:如果a和b的属性值没有发生变化,那么多次调用a.equals(b)应该返回同样的结果。
5. 非空性:任何非null的引用值x,x.equals(null)都应该返回false。
下面是一个重写equals()方法的例子:
```
public class Person {
private String name;
private int age;
// 构造方法、getter和setter省略
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
```
在这个例子中,我们首先判断两个对象是否为同一个对象,如果是,直接返回true。然后判断obj是否为null或者是否和当前对象属于不同的类,如果是,返回false。最后比较两个对象的属性值是否相等,如果相等,返回true,否则返回false。需要注意的是,在比较字符串属性时,我们使用了Objects.equals()方法,可以避免空指针异常。