0

是否可以在不覆盖 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 处的地址...

4

4 回答 4

1

可以使用==运算符验证基本对象身份,或者equals()如果它没有被覆盖。如果您想定义自己的自定义equals()行为,当然您需要覆盖它。

于 2013-06-26T12:42:39.617 回答
0

这取决于你需要做什么。为什么不覆盖等于?这是正确的方法...

您仍然可以手动比较对象之间的字段,但将其打包到 equals 方法中会更简洁。

现在,如果您问为什么不只使用 a == b,那么它在大多数情况下都不起作用,因为正如您所说,它是您正在调用的 Object 引用,而不是它的内容。

于 2013-06-26T12:41:25.260 回答
0

您可以尝试使用 : 来执行此操作(如果返回,则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
}
于 2013-06-26T12:42:27.157 回答
0

这取决于您的要求。您可以根据需要实现Comparator并覆盖其compare()。里面的逻辑compare()不用equals()或根本不用hashCode()。我相信检查相等和比较对象是不同的事情。

于 2013-06-26T12:40:37.480 回答