因此,很長一段時間以來,我認爲使用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