この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れたメソッドを呼び出します。そのため、キーワードを使用して作成されたオブジェクトごとに常に提供されます。e1e2falsenew
以下は Object からのメソッドの抜粋です
public boolean equals(Object obj) {
return (this == obj);
}
等価チェックを比較するために、JLS はequalsクラスでオーバーライドするメソッドを提供しています。最終的な方法ではありません。JLS は、プログラマーが 2 つのオブジェクトを等しくしたい理由を知りません。そのため、彼らはオーバーライドするための非最終的な方法を提供しました。
hashcodeオブジェクトの等価性をチェックする役割を果たしません。hashcodeオブジェクトが利用可能なバケットをチェック/見つけます。hashcodeHashMap などの一部のクラスで使用されるハッシュ手法で使用します。
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