ホームページ  >  記事  >  Java  >  Java でオブジェクトが等しいかどうかを正しく比較する方法:equals(Object) メソッドのオーバーライドとオーバーライド

Java でオブジェクトが等しいかどうかを正しく比較する方法:equals(Object) メソッドのオーバーライドとオーバーライド

WBOY
WBOYオリジナル
2024-01-11 17:18:05554ブラウズ

Java でオブジェクトが等しいかどうかを正しく比較する方法:equals(Object) メソッドのオーバーライドとオーバーライド

Java の equals(Object) メソッドは、2 つのオブジェクトの同等性を比較するために使用されるメソッドです。 Javaクラスでは、デフォルトでequalsメソッドがObjectクラスから継承され、単純に2つのオブジェクトの参照値を比較します。ただし、多くの場合、カスタムの方法でオブジェクトが等しいかどうかを比較する必要があり、そのためにはサブクラスで equals メソッドをオーバーライドする必要があります。

オブジェクトが等しいかどうかを正しく比較するには、いくつかのルールに従う必要があります。まず、equals メソッドは再帰性を満たす必要があります。これは、オブジェクトがそれ自体と等しい必要があることを意味します。次に、equals メソッドは対称性を満たす必要があります。つまり、オブジェクト A がオブジェクト B と等しい場合、オブジェクト B とオブジェクト A も等しくなければなりません。最後に、equals メソッドは推移性を満たす必要があります。つまり、オブジェクト A がオブジェクト B に等しく、オブジェクト B がオブジェクト C に等しい場合、オブジェクト A とオブジェクト C も等しくなければなりません。

equals メソッドをオーバーライドしてオーバーライドするには、次の重要な点を考慮する必要があります。

まず、equals メソッドのシグネチャが Object クラスの equals メソッドと一致していることを確認する必要があります。 equals メソッドのシグネチャは public booleanquals(Object obj) である必要があります。これは、Object 型のパラメータを受け入れ、ブール値を返す必要があることを意味します。

2 番目に、型チェックを実行して、受信パラメータが現在のオブジェクト型と一致するオブジェクトであることを確認する必要があります。これは、instanceof キーワードを使用して実現できます。型チェックが失敗した場合は、直接 false を返すことができます。

次に、受信パラメータを現在のオブジェクトの型に変換し、各属性の同等性を比較する必要があります。このプロセスでは、Java の equals メソッドの実装規則に従う必要があります。つまり、「==」演算子を使用する代わりに、equals メソッドを使用してオブジェクトのプロパティを比較します。

属性値を比較するときは、null 参照の状況を考慮する必要があります。プロパティ値が null の場合、比較に Objects クラスの equals メソッドを使用できます。これにより、null 参照の状況が正しく処理されます。さらに、基本的なタイプの属性の場合、比較に「==」演算子を直接使用できます。

最後に、equals メソッドが hashCode メソッドをオーバーライドするようにする必要があります。 Java 仕様によれば、2 つのオブジェクトが等しい場合、それらの hashCode メソッドは同じ値を返さなければなりません。これは、ハッシュ テーブルなどのデータ構造を使用するときに、オブジェクトが正しく格納および取得されることを保証するためです。

以下は、equals メソッドをオーバーライドする方法を示す例です:

public class Person {
    private String name;
    private int age;
  
    // 省略构造方法、getter和setter方法
  
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Person)) {
            return false;
        }
        Person other = (Person) obj;
        return Objects.equals(this.name, other.name) && this.age == other.age;
    }
  
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
  
    // 省略其他方法
}

上の例では、equals メソッドをオーバーライドして、人物の名前と年齢のプロパティの同等性を比較します。オブジェクトセックス。同時に、等しいオブジェクトが同じハッシュ コードを持つようにするために、hashCode メソッドもオーバーライドしました。

要約すると、equals メソッドを正しく書き換えてオーバーライドすることで、オブジェクトが等しいかどうかを比較するときに正しい結果が得られるようになります。なお、equalsメソッドの書き換えには再帰性、対称性、推移性などの性質を満たす必要があり、hashCodeメソッドも書き換える必要がある。これらのルールに従うことで、オブジェクトの等価比較を使用するときに正しい結果が得られることを保証できます。

以上がJava でオブジェクトが等しいかどうかを正しく比較する方法:equals(Object) メソッドのオーバーライドとオーバーライドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。