在同一个类中使用equals方法而不覆盖

时间:2013-06-26 12:36:05

标签: java object equals

是否可以在不覆盖equals方法的情况下比较同一类的2个对象..? 如果是的话,请告诉我如何......? 根据我的说法,不能比较同一类的2个不同对象的变量而不覆盖,因为对象包含内存地址而不是变量值。

class A {
int x;
A(int x) {
this.x=x; }
}


A a1=new A(5);
A a2=new A(4);

我们可以比较a1和amp; a2使用equals方法而不覆盖它..?此值也应该与a1和a的地址进行比较。 A2 ...

4 个答案:

答案 0 :(得分:1)

可以使用==运算符验证基本对象标识,如果未覆盖,则equals()验证。如果您想定义自己的自定义equals()行为,当然您需要覆盖它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

您可以尝试使用Comparator执行此操作:(如果0将返回.equals(),<比较方法返回true < / p>

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
}