因此很长一段时间以来我都认为使用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
答案 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。