因此,很长一段时间以来,我认为使用equals()
来比较对象,它使用hashcode()
,这意味着如果2个对象具有相同的哈希代码,则返回true。如何在java中比较对象?
的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));
}
此外,我重写哈希码()到:
@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,print语句也会打印false。 奇怪,为什么 控制台:
German: [email protected] Rover: [email protected]
false
所以当处理对象时,它会查找内存地址而不是哈希码来返回true? – Bishop
是的,确切地说。它看起来是否“指向”同一个对象,并且与散列码无关。 – Aenadon