このequals
メソッドは、2 つのオブジェクト値が等しいかどうかを比較します。私の質問は、2 つのオブジェクトをどのように比較するかです。2 つのオブジェクトが等しいかどうかをどのように判断できますか? 2つのオブジェクトの比較に基づいて知りたいです。hashCode
メソッドは含めません。
3 に答える
次の例を検討してください。
public class Employee {
String name;
String passportNumber;
String socialSecurityNumber;
public static void main(String[] args) {
Employee e1 = new Employee();
Employee e2 = new Employee();
boolean isEqual = e1.equals(e2); // 1
System.out.println(isEqual);
}
}
コメント //1 のコードでは、 と の参照を単純に比較する Object クラスから継承さequals
れたメソッドを呼び出します。そのため、キーワードを使用して作成されたオブジェクトごとに常に提供されます。e1
e2
false
new
以下は Object からのメソッドの抜粋です
public boolean equals(Object obj) {
return (this == obj);
}
等価チェックを比較するために、JLS はequals
クラスでオーバーライドするメソッドを提供しています。最終的な方法ではありません。JLS は、プログラマーが 2 つのオブジェクトを等しくしたい理由を知りません。そのため、彼らはオーバーライドするための非最終的な方法を提供しました。
hashcode
オブジェクトの等価性をチェックする役割を果たしません。hashcode
オブジェクトが利用可能なバケットをチェック/見つけます。hashcode
HashMap などの一部のクラスで使用されるハッシュ手法で使用します。
2 つのオブジェクトのハッシュコードが等しい場合、それは 2 つのオブジェクトが等しいことを意味しません。
2 つのオブジェクトの場合、equals
メソッドが true を返す場合、ハッシュコードは同じでなければなりません。
メソッドをオーバーライドして、equals
オブジェクトが必要な基準e1
とe2
上記のコードが等しいかどうかを決定する必要があります。passportNumber
それは、またはsocialSecurityNumber
の組み合わせに基づいていpassportNumber+socialSecurityNumber
ますか?
I want to know based on what it compares the two objects.
答えは、デフォルトでは、継承されたObject
クラスのequals
メソッドの助けを借りて、== 記号を使用して 2 つのオブジェクトの参照の等価性を比較します。コードは上記のとおりです。
logically, equals does not compare objects (however you can do anything with it), it compares values. for object comparison there is '==' operator