重写equals方法的代码示例
时间: 2023-05-22 20:04:43 浏览: 67
当需要重写equals方法时,可以考虑如下示例代码:
```
public class Person {
private String name;
private int age;
// constructors, getters, setters....
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person person = (Person) obj;
return person.getName().equals(name) && person.getAge() == age;
}
}
```
上述代码中,我们通过重写equals方法来比较两个Person对象是否相等。我们首先判断两个对象是否为同一个引用,如果是则直接返回true。然后我们判断obj是否是Person类型的对象,如果不是则返回false。最后我们将obj强制转换为Person类型的对象,比较其name和age属性是否与当前对象的相同,如果相同则返回true,否则返回false。
相关问题
重写equals方法
在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类型的对象。这样可以避免空指针异常和类型转换异常。
怎么重写equals方法
要重写equals方法,需要遵循以下几个步骤:
1. 确定需要比较的属性
确定需要比较的属性是非常重要的一步,这些属性是用于判断两个对象是否相等的依据。
2. 检查传入的对象是否为null和类型是否一致
在重写equals方法时,需要先检查传入的对象是否为null,如果为null则返回false。然后需要检查传入的对象类型是否与当前对象类型一致,如果类型不一致则返回false。
3. 比较属性值是否相等
比较两个对象的属性值是否相等,如果有任何一个属性不相等则返回false,否则返回true。
4. 覆盖hashCode方法
当重写equals方法时,也需要同时重写hashCode方法。hashCode方法是用于返回一个对象的哈希码,这个哈希码用于在哈希表中查找对象。如果两个对象相等,则它们的哈希码应该相等。
以下是一个示例代码,展示如何重写equals方法:
```java
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
// 检查传入的对象是否为null,如果为null则返回false
if (obj == null) {
return false;
}
// 检查传入的对象类型是否与当前对象类型一致,如果类型不一致则返回false
if (!(obj instanceof Person)) {
return false;
}
// 比较属性值是否相等,如果有任何一个属性不相等则返回false,否则返回true
Person person = (Person) obj;
return name.equals(person.name) && age == person.age;
}
@Override
public int hashCode() {
// 产生一个哈希码,使用name和age属性来计算
return Objects.hash(name, age);
}
}
```