Javaのequalsメソッドが何に使用されるかを教えてください。
Javaのequals()メソッドは、2つのオブジェクトの内容が等しいかどうかを比較するために使用されます。equals()メソッドはObjectクラスで定義されているため、すべてのJavaクラスはこのメソッドを継承します。
equals()では通常、オブジェクトの参照が等しいかどうか、つまりオブジェクトが同じメモリ上の同一アドレスを指しているかを比較します。ただし、ほとんどの場合、単純に参照を比較するだけでなく、オブジェクトの内容が等しいかどうかを比較するequals()を実装する必要があります。
equals()メソッドをオーバーライドするときは、以下の原則に従ってください
- 対称性:x.equals(y)が真であれば、y.equals(x)も真となること。
- 同一性:任意の非ヌル参照値xに対して、x.equals(x)は常にtrueを返すこと。
- 推移性:x.equals(y) が真を返し、y.equals(z) も真を返したとき、x.equals(z) も真を返すこと。
- 一貫性:任意の非nullの参照値xおよびyについて、オブジェクトが変更されていなければ、メソッドx.equals(y)は常に同じ結果を返却しなければならない。
- 任意のnullでない参照値xについて、x.equals(null)はfalseを返すべきである。
通常、オブジェクトの属性値が等しいかどうかを比較する場合、カスタムクラスでequals()メソッドをオーバーライドする必要があります。例えば、Personクラスがある場合、二人のPersonオブジェクトの名前と年齢が等しいかどうかを比較するためにequals()メソッドをオーバーライドできます。
以下にequals()メソッドをオーバーライドしている例のコードを示します。
public class Person {
private String name;
private int age;
// 构造方法、getter和setter方法省略
@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()メソッドをオーバーライドすることで、オブジェクトの内容の一致度を具体的に比較し、2つのオブジェクトの内容が等しいかどうかをより正確に判断できます。