equals メソッドのオーバーライドと新しいメソッドの作成 質問する

equals メソッドのオーバーライドと新しいメソッドの作成 質問する

私は、Java の .equals() メソッドは、作成したクラスに固有のものになるようにオーバーライドする必要があると常に考えていました。つまり、同じインスタンスへの 2 つの参照ではなく、2 つの異なるインスタンスの等価性を探すということです。しかし、デフォルトのオブジェクトの動作はそのままにして、同じクラスの 2 つのオブジェクトの等価性をテストするための新しいメソッドを作成するべきだと考えているプログラマーもいます。

equals メソッドをオーバーライドすることに対する賛否両論は何ですか?

ベストアンサー1

標準ライブラリ クラスで同等性をテストする場合 (たとえば、java.util.Set に一意の要素が含まれていることを確認する場合や、java.util.Map オブジェクトでオブジェクトをキーとして使用する場合)、equals メソッドをオーバーライドする必要があります。

注意: equalsをオーバーライドする場合は、ドキュメントに記載されているAPI契約を遵守してください。たとえば、次のものもオーバーライドしてください。オブジェクト.hashCode:

2 つのオブジェクトが equals(Object) メソッドに従って等しい場合、2 つのオブジェクトのそれぞれに対して hashCode メソッドを呼び出すと、同じ整数結果が生成されるはずです。

編集:私はこの件に関して完全な回答として投稿したわけではないので、equalsをオーバーライドするのが最も効果的であるというFredrik Kalsethの発言を引用します。不変オブジェクトAPIを引用するには地図:

注意: 変更可能なオブジェクトをマップ キーとして使用する場合は、細心の注意を払う必要があります。オブジェクトがマップ内のキーであるときに、オブジェクトの値が等価比較に影響するような方法で変更された場合、マップの動作は指定されません。

おすすめ記事