【发布时间】:2017-10-14 17:40:30
【问题描述】:
所以很长一段时间以来,我一直认为对象是使用 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;
}
现在即使两个对象都是@Dog0,打印语句也会打印错误。 想知道为什么 控制台:
German: Animal.Dog@0 Rover: Animal.Dog@0
false
【问题讨论】: