使用Java编程语言时,经常会用到equals()方法。equals()方法是Object类的方法,它用于比较两个对象是否相等。然而,在Java中,对于每个Object类实例,有一个默认的equals()方法实现,它的比较结果等价于使用“==”运算符比较两个引用类型变量的结果。
但是,如果我们想比较两个对象的属性值是否相等而不是比较两个引用类型变量是否指向同一堆内存,则需要在我们自己的类中实现equals()方法。在实现equals()方法时,需要保证该方法遵循以下原则:
1. 自反性:任何非空引用,x.equals(x)应该返回true。
2. 对称性:对于任何非空引用x和y,当且仅当y.equals(x)返回true时,x.equals(y)也应该返回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 boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
MyClass myClass = (MyClass) obj;
return myClass.name.equals(this.name) && myClass.age == this.age;
}
需要注意的是,如果我们在自己的类中实现了equals()方法,那么在hashCode()方法中也需要使用相同的属性来计算对象的哈希码。