6

このequalsメソッドは、2 つのオブジェクト値が等しいかどうかを比較します。私の質問は、2 つのオブジェクトをどのように比較するかです。2 つのオブジェクトが等しいかどうかをどのように判断できますか? 2つのオブジェクトの比較に基づいて知りたいです。hashCodeメソッドは含めません。

4

3 に答える 3

4

次の例を検討してください。

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オブジェクトが必要な基準e1e2上記のコードが等しいかどうかを決定する必要があります。passportNumberそれは、またはsocialSecurityNumber の組み合わせに基づいていpassportNumber+socialSecurityNumberますか?

I want to know based on what it compares the two objects.

答えは、デフォルトでは、継承されたObjectクラスのequalsメソッドの助けを借りて、== 記号を使用して 2 つのオブジェクトの参照の等価性を比較します。コードは上記のとおりです。

于 2013-03-21T09:18:45.140 に答える
0

logically, equals does not compare objects (however you can do anything with it), it compares values. for object comparison there is '==' operator

于 2013-03-21T08:37:46.863 に答える