Java の equals メソッドの使い方
Javaでは、equals() メソッドは2つのオブジェクトが等しいかどうかを比較するために使用されるメソッドです。equals() メソッドはObjectクラスのメソッドで、すべてのクラスはObjectクラスを継承するため、すべてのクラスでequals()メソッドを使用できます。
equals()メソッドのデフォルト実装は2つのオブジェクトの参照が等しいかどうかを比較する、つまり2つのオブジェクトが同じオブジェクトかどうかを判定する。しかし通常は2つのオブジェクトの内容が等しいかどうかを比較する必要があるため、equals()メソッドをオーバーライドする必要がある。
equals() メソッドをオーバーライドする場合は、一般的に以下の条件を満たす必要があります。
- 自反性:对于任意非null的引用值x,x.equals(x)应该返回true。
- 対称性: nullではない任意の参照xとyについて、x.equals(y)がtrueを返す場合、y.equals(x)もtrueを返さなければならない。
- 推移性: null 以外の任意の参照値 x, y, z について、x.equals(y)が真でありy.equals(z)が真であれば、x.equals(z)も真となること。
- 一致性:任意のnullでない参照値 xとyに対して、オブジェクトの比較に使用したフィールドが変更されていない限り、x.equals(y)は何度呼び出しても同じ結果を返す。
- 任意の非null参照値xに対して、x.equals(null)はfalseを返す。
equals()メソッドをオーバーライドする際には、一般的には引数のオブジェクトが自身のクラスのインスタンスであるか否かを先に判定してから比較処理を行う。
たとえば、以下は equals() メソッドを上書きした例です。
public class Person {
private String name;
private int age;
// 省略构造方法和其他方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
前述の例では、equals()メソッドは最初に渡されたオブジェクトがPersonクラスのインスタンスかどうかを判断し、その後で2つのPersonオブジェクトの属性値が等しいかどうかを比較します。最後に、Objects.equals()メソッドを使用して、name属性値がnullの場合を処理します。