Java での Equals メソッドのオーバーライド
Java では、equals メソッドは 2 つのオブジェクトが等しいかどうかを判断します。デフォルトでは、equals メソッドはオブジェクト参照を比較しますが、これは多くのカスタム クラスにとって望ましい動作ではありません。 equals メソッドをオーバーライドしてカスタムの等価セマンティクスを定義するには、次のガイドラインに従う必要があります:
解決策:
提供されたコードは、文字列のみを対象とした、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 サイトの他の関連記事を参照してください。