Javaにおけるequalsメソッドの使用方法
Javaにおいて、equals()メソッドは2つのオブジェクトが等しいかどうかを比較するために使用されます。equals()メソッドはJavaのObjectクラスのメソッドであり、すべてのオブジェクトはObjectクラスから継承されるため、すべてのクラスはequals()メソッドを使用できます。
通常、equals()メソッドは2つのオブジェクトの参照が等しいかどうかを比較します。つまり、2つのオブジェクトが同じメモリアドレスを指しているかどうかを判定します。2つのオブジェクトの参照が等しければtrueを返します。そうでなければ、falseを返します。
だが、多くの場合、参照自体ではなく、オブジェクトの内容が等しいかどうかを比較する必要がある。そのためには、equals()メソッドをオーバーライドする必要がある。
Equals()メソッドをオーバーライドする一般的な手順は次のとおりです。
- @Overrideアノテーションを使用し、オーバーライドするメソッドが親クラスのequals()メソッドを正しくオーバーライドしていることを確認します。
- 渡されたオブジェクトがnullであるかをチェックし、もしnullならfalseを返す。
- 渡し値のオブジェクトが同じ型かどうかをチェックし、異なる型であればFalseを返す
- 受信したオブジェクトを現在の型に変換します。
- オブジェクトのプロパティと渡されたオブジェクトのプロパティが等しいかどうかを比較し、すべて一致すればtrueを返し、そうでない場合はfalseを返す。
次に、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);
}
}
上記の例では、Personクラスのequals()メソッドをオーバーライドしています。まず、渡されたオブジェクトがnullかどうかをチェックし、次に渡されたオブジェクトがPersonクラスのインスタンスかどうかをチェックしています。次に、渡されたオブジェクトをPerson型に変換し、nameとageプロパティが等しいかどうかを比較します。最後に、すべてのプロパティが等しい場合はtrueを返し、そうでない場合はfalseを返します。
equals()メソッドをオーバーライドすることでPersonオブジェクトの等価性を判定するequals()メソッドを使用できるようになります。例えば、
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Alice", 25);
Person person3 = new Person("Bob", 30);
System.out.println(person1.equals(person2)); // 输出true
System.out.println(person1.equals(person3)); // 输出false