Javaのequals(Object)メソッドは、2つのオブジェクトが等しいかどうかを比較するために使用されるメソッドです。 Java では、オブジェクトの内容が等しいかどうかを比較する場合、通常、オブジェクトの参照比較に「==」演算子を使用する代わりに、equals() メソッドを使用します。
equals(Object) メソッドの実装原則は、次の点に基づいています。
- 対称性: a.equals(b) が true を返す場合、b.equals(a ) も true を返す必要があります。これは、オブジェクト a が b であるか、b が a であるかに関係なく、equals() メソッドは同じ結果を返す必要があることを意味します。
- Reflective: a.equals(a) は、null 以外の参照値 a に対して true を返す必要があります。これは、オブジェクトをそれ自体と比較すると、常に true が返される必要があることを意味します。
- 推移性: a.equals(b) が true を返し、b.equals(c) が true を返す場合、a.equals(c) も true を返す必要があります。これは、2 つのオブジェクトが等しい場合、それらはそれぞれ 3 番目のオブジェクトと等しいことを意味します。
- 一貫性: 2 つのオブジェクトの内容が変更されていない場合、equals() メソッドを複数回呼び出しても、常に同じ結果が返されるはずです。これは、equals() メソッドの戻り値は、他の要素ではなく、オブジェクトの内容によってのみ決定される必要があることを意味します。
- 非 null 可能性: null 以外の参照値 a については、a.equals(null) は false を返す必要があります。これは、null オブジェクトが null 以外のオブジェクトと等しくないことを意味します。
これらの原則を実装し、equals(Object) メソッドを正しく使用するには、次のベスト プラクティスに従う必要があります。
- @Override アノテーションを使用します。 equals() メソッドをオーバーライドする場合は、 @Override アノテーションを使用する必要があります。これにより、子クラスで新しいメソッドを定義するのではなく、親クラスのequals() メソッドを実際にオーバーライドしていることが保証されます。
- パラメータが null かどうかを確認する:equals() メソッドの開始時に、最初に受信パラメータが null かどうかを確認する必要があります。 null の場合、null オブジェクトは null 以外のオブジェクトと等しくないため、false を返す必要があります。
- 型チェックにinstanceof演算子を使用する: オブジェクト型を変換する前に、オブジェクトの比較時にClassCastExceptionが発生しないように、型チェックにinstanceof演算子を使用する必要があります。
- オブジェクトの内容を比較する: 参照型の属性の場合、比較にはequals()メソッドを使用する必要があります。基本タイプのプロパティの場合、比較に「==」演算子を使用できます。
- Java の自動コード生成ツールの使用を検討する:equals() メソッドを実装する場合、IDE で自動生成される equals() メソッドなど、Java の自動コード生成ツールの使用を検討できます。これにより、equals() メソッドを手動で記述することによって発生する可能性のあるエラーが回避されます。
要約すると、equals(Object) メソッドの実装原則は、対称性、反射、推移性、一貫性、および非 null の要件に基づいています。 quals() メソッドを実装するときは、正しく効率的なオブジェクト比較を実現するために、次の原則に従い、上記のベスト プラクティスを考慮する必要があります。
以上がJavaのequalsメソッドの実装原則とベストプラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。