📅  最后修改于: 2023-12-03 15:16:31.786000             🧑  作者: Mango
在Java中,对象之间的比较是通过equals()方法完成的。在默认情况下,equals()方法会比较两个对象的引用是否相等。然而,在某些情况下,程序员希望比较两个对象的内容是否相等。为了实现这个目标,Java允许程序员覆盖equals()方法。
要覆盖equals()方法,必须遵循一些规则:
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof MyClass)) {
return false;
}
MyClass other = (MyClass) obj;
return other.getName().equals(this.name) &&
other.getValue() == this.value;
}
下面展示一个覆盖equals()方法的示例。假设我们有一个名为MyClass的类,在该类中,我们定义了两个变量:name和value。我们希望比较两个MyClass对象的name和value是否相等。
public class MyClass {
private String name;
private int value;
public MyClass(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof MyClass)) {
return false;
}
MyClass other = (MyClass) obj;
return other.getName().equals(this.name) &&
other.getValue() == this.value;
}
public static void main(String[] args) {
MyClass obj1 = new MyClass("John", 10);
MyClass obj2 = new MyClass("John", 10);
MyClass obj3 = new MyClass("Mary", 20);
// 比较两个MyClass对象
System.out.println(obj1.equals(obj2)); // true
System.out.println(obj1.equals(obj3)); // false
}
}
上面的代码中,我们使用MyClass的构造函数创建了三个对象:obj1、obj2和obj3。然后我们调用obj1的equals()方法来比较obj1和obj2,结果为true,因为它们的name和value相等。然后我们调用obj1的equals()方法来比较obj1和obj3,结果为false,因为它们的name或value不相等。
在Java中,equals()方法是一种比较两个对象是否相等的方法。如果我们希望比较两个对象的内容而不是引用,我们可以覆盖equals()方法。当覆盖equals()方法时,我们必须遵循一些规则,如对称性、传递性和一致性。