是否可以在不覆盖 equals 方法的情况下比较同一类的 2 个对象..?如果是,请让我知道如何.. ? 据我说,不可能在不覆盖的情况下比较同一类的 2 个不同对象的变量,因为对象包含内存地址而不是变量值。
class A {
int x;
A(int x) {
this.x=x; }
}
A a1=new A(5);
A a2=new A(4);
我们可以使用 equals 方法比较 a1 和 a2 而不覆盖它吗?此外,应该比较该值而不是 a1 和 a2 处的地址...
可以使用==
运算符验证基本对象身份,或者equals()
如果它没有被覆盖。如果您想定义自己的自定义equals()
行为,当然您需要覆盖它。
这取决于你需要做什么。为什么不覆盖等于?这是正确的方法...
您仍然可以手动比较对象之间的字段,但将其打包到 equals 方法中会更简洁。
现在,如果您问为什么不只使用 a == b,那么它在大多数情况下都不起作用,因为正如您所说,它是您正在调用的 Object 引用,而不是它的内容。
您可以尝试使用 : 来执行此操作(如果返回,则Comparator
比较方法应返回)0
.equals()
true
public class YourClassComparator implements Comparator<YourClass> {
@Override
public int compare(YourClass left, YourClass right) {
// do the comparison and return
// <0 if left < right
// 0 if left equals right
// >0 if left > right
}
}
然后用它来检查是否相等
if(new YourClassComparator().compare(yourClass1, yourClass2) == 0) {
// objects are equal
}
这取决于您的要求。您可以根据需要实现Comparator并覆盖其compare()。里面的逻辑compare()
不用equals()
或根本不用hashCode()
。我相信检查相等和比较对象是不同的事情。