重写equals方法
时间: 2023-08-04 13:25:39 浏览: 52
在Java中,equals方法是用来比较两个对象是否相等的方法。如果两个对象相等,则返回true,否则返回false。默认情况下,equals方法比较的是两个对象的引用,也就是比较它们在内存中的地址是否相同。
如果需要比较两个对象的内容是否相等,就需要重写equals方法。重写equals方法时,需要满足以下几个条件:
1. 自反性:对于任何非空引用x,x.equals(x)必须返回true。
2. 对称性:对于任何非空引用x和y,如果x.equals(y)返回true,则y.equals(x)也必须返回true。
3. 传递性:对于任何非空引用x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,则x.equals(z)也必须返回true。
4. 一致性:对于任何非空引用x和y,多次调用x.equals(y)的结果必须相同。
5. 非空性:对于任何非空引用x,x.equals(null)必须返回false。
以下是一个示例代码,演示如何重写equals方法:
```
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 obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person person = (Person) obj;
return this.name.equals(person.name) && this.age == person.age;
}
// 省略其他代码
}
```
在这个示例中,我们重写了Person类的equals方法,比较的是两个Person对象的name和age属性是否相等。如果两个对象的name和age都相等,则认为它们相等。注意,我们还要检查obj是否为null以及是否为Person类型的对象。这样可以避免空指针异常和类型转换异常。