ホームページ > Java > &#&チュートリアル > カスタムオブジェクト比較のためにJavaでequals()メソッドを適切にオーバーライドする方法

カスタムオブジェクト比較のためにJavaでequals()メソッドを適切にオーバーライドする方法

Barbara Streisand
リリース: 2024-12-27 08:16:09
オリジナル
373 人が閲覧しました

How to Properly Override the equals() Method in Java for Custom Object Comparisons?

Java での Equals メソッドのオーバーライド

Java では、equals メソッドは 2 つのオブジェクトが等しいかどうかを判断します。デフォルトでは、equals メソッドはオブジェクト参照を比較しますが、これは多くのカスタム クラスにとって望ましい動作ではありません。 equals メソッドをオーバーライドしてカスタムの等価セマンティクスを定義するには、次のガイドラインに従う必要があります:

  • Check for null: メソッドは、最初に渡されたオブジェクトが null かどうかを確認してから返す必要があります。
  • 型の確認: 渡されたオブジェクトが呼び出し元と同じ型であることを確認します。 物体。そうでない場合は、false を返します。
  • フィールドの比較: 等価性を定義する関連フィールドを特定し、その値を比較します。
  • 演算子の優先順位を使用: を使用します演算子の優先順位により、潜在的な null 値が、値が返される前にチェックされるようになります。

解決策:

提供されたコードは、文字列のみを対象とした、equals メソッドを使用して整数フィールド (年齢) を比較しようとしました。これを修正するには、年齢フィールドの等価性チェックを == 演算子を使用した比較に置き換える必要があります。

...
} else {
    People otherPeople = (People) other;
    result = name.equals(other.name) && other.age == age;
}
...
ログイン後にコピー

使用法:

次のコードは、オーバーライドされたequalsメソッドの使用方法:

...
// Add several Person objects to an ArrayList
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));

// Compare each pair of Person objects using the overridden equals method
for (int i = 0; i < people.size() - 1; i++) {
    for (int y = i + 1; y <= people.size() - 1; y++) {
        boolean check = people.get(i).equals(people.get(y));
        System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
        System.out.println(check);
    }
}
...
ログイン後にコピー

このコードは次を生成します。出力:

-- Subash Adhikari - VS - K false
-- Subash Adhikari - VS - StackOverflow false
-- Subash Adhikari - VS - Subash Adhikari true
-- K - VS - StackOverflow false
-- K - VS - Subash Adhikari false
-- StackOverflow - VS - Subash Adhikari false
ログイン後にコピー

この出力は、オーバーライドされたequalsメソッドが名前と年齢フィールドに基づいて人物オブジェクトを正しく比較していることを示しています。

以上がカスタムオブジェクト比較のためにJavaでequals()メソッドを適切にオーバーライドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート