如何在java中比较对象?

时间:2017-10-14 17:40:30

标签: java equals hashcode

因此很长一段时间以来我都认为使用equals()使用hashcode()来比较对象,这意味着如果2个对象具有相同的哈希码,则返回true。

源代码中的equals()方法:

@see java.lang.System #identityHashCode
public boolean equals(Object obj) {
        return (this == obj);
    }

所以我创造了这个:

public static void main(String[] args) {
        Dog rover = new Dog("Rover");
        Dog german = new Dog("Rover2");

        System.out.println("German: " + german + "\tRover: " + rover);
        System.out.println(german.equals(rover));


    }

我还将hashCode()重写为:

    @Override
    public final boolean equals(Object obj) {
        if (this == obj)
            return true;
    }

    @Override
    public int hashCode() {
        //The main point of 0 is to check how equals actually work
        return 0;
    }

现在print语句打印为false,即使两个对象都是@ Dog0。 想知道为什么 控制台:

German: Animal.Dog@0    Rover: Animal.Dog@0
false

2 个答案:

答案 0 :(得分:1)

它们不相等的原因与哈希码无关。

他们不平等的原因是这个条件:

 + KEY_PH_NO + " TEXT" + KEY_ADRESS + " TEXT" + ")";

仅当 + KEY_PH_NO + " TEXT, " + KEY_ADRESS + " TEXT" + ")"; this == obj 相同的对象时返回true
你有2个对象,所以这不可能是真的。

此外,正如您从源代码中看到的那样,调用obj不会调用this。 AFAIK,没有实现(无论如何在JDK中)equals()调用hashCode()

答案 1 :(得分:1)

您使用b = fun2(3, 7)作为equals比较的“别名”,这是错误的,这就是为什么它不起作用。

对象具有this == obj方法,因为equals只有在实际上是同一个对象(内存中的相同引用)时才返回true。

您需要做的是手动比较this == obj方法中的属性,只有匹配时才返回true。