私は長い間、オブジェクトはequals()
を使って比較されたと考えました。つまり、hashcode()
を使用しています。つまり、2つのオブジェクトが同じハッシュコードを持つ場合、trueを返します。ソースコードからJavaでオブジェクトを比較する方法は?
のequals()メソッドは:
@see java.lang.System #identityHashCode
public boolean equals(Object obj) {
return (this == obj);
}
は、だから私は、これを作成しました:今
@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;
}
:iがのhashCode()をオーバーライドしまた
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));
}
両方のオブジェクトが@ Dog0であっても、printステートメントはfalseを出力しています。 疑問に思うなぜ コンソール:彼らは「同じ」ではありません
German: [email protected] Rover: [email protected]
false
オブジェクトを扱うとき、それは真実を返すためにハッシュコードではなくメモリアドレスを調べますか? – Bishop
はい、正確です。あなたが同じオブジェクトを「指し示している」かどうかを調べ、ハッシュコードとは何の関係もありません。 – Aenadon