java の equals メソッドの機能は何ですか?
Javaでは、equals()メソッドは、2つのオブジェクトが等しいかどうかを比較するメソッドです。これはObjectクラスに定義されたメソッドであり、すべてのJavaオブジェクトはObjectクラスを継承するため、すべてのオブジェクトにはequals()メソッドがあります。
equals() のデフォルトの実装では、2 つのオブジェクトの参照が等しいかどうか、つまり同じメモリアドレスを指しているかどうかが比較されます。しかし、多くの場合、オブジェクトの属性に基づいてオブジェクトが等しいかどうかを判断する必要があります。これには equals() メソッドをオーバーライドする必要があります。
equals()メソッドをオーバーライドする際には、一般的に次の条件を満たす必要があります:
- 自己との等価性:任意の非空オブジェクトxについて、x.equals(x)は真を返すものとする。
- 対称性: 任意の非空オブジェクトx、yについて、x.equals(y) が true を返す場合、y.equals(x) も true を返すこと。
- 伝達性: x、y、zの空でない任意のオブジェクトの場合、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)もtrueを返す必要がある。
- 一貫性:任意の非空オブジェクト x、y に対して、x.equals(y) の複数回の呼び出し結果は同じであり、オブジェクトが変更されなければ、equals() メソッドの複数の呼び出しから同じ結果が返されます。
- 全ての非nullオブジェクトxについて、x.equals(null)はfalseを返すこと。
オブジェクトのフィールドを比較して等価性を判定する場合は、equals()メソッドをオーバーライドする必要があります。基本データ型フィールドの比較には==演算子を使用し、オブジェクト型フィールドの比較にはObjects.equals()メソッドを使用する必要があります。
equals()メソッドを上書きすることで、カスタムクラスのオブジェクトの等価性を柔軟かつ正確に比較することができます。