1. ホーム
  2. java

[解決済み] equals(Object obj)って何するの?

2022-03-03 15:59:01

質問

いろいろなところでイコールメソッドを見かけます。これは実際にどのような働きをするのでしょうか?また、このメソッドはすべてのクラスで必要なのでしょうか?

   public boolean equals(Object obj)
    {
    if (obj == this)
    {
        return true;
    }
    if (obj == null)
    {
        return false;
    }
    if (obj instanceof Contact)
    {
        Contact other = (Contact)obj;
        return other.getFirstName().equals(getFirstName()) &&
                other.getLastName().equals(getLastName()) &&
                other.getHomePhone().equals(getHomePhone()) &&
                other.getCellPhone().equals(getCellPhone());

    }
    else
    {
        return false;
    }
}

解決方法は?

オブジェクトの等価性を再定義しています。

デフォルトでは( java.lang.Object ) は、オブジェクトが他のオブジェクトと同じインスタンスである場合にのみ等しくなります。しかし、オーバーライドすると、カスタムの等式ロジックを提供することができます。

例えば java.lang.String は、内部の文字配列を比較することで等価性を定義しています。そのため

String a = new String("a"); //but don't use that in programs, use simply: = "a"
String b = new String("a");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

このような等質性のテストは必要ないかもしれませんが、使用するクラスでは必要です。例えば List.contains(..)List.indexOf(..) 使用 .equals(..) .

チェック javadoc が必要とする正確な契約については equals(..) メソッドを使用します。

をオーバーライドする場合、多くの場合 equals(..) をオーバーライドする必要があります。 hashCode() (同じフィールドを使用して)。これもjavadocに明記されています。