Javaでは、2つのオブジェクトのプロパティ値が等しいかどうかを比較する方法はありますか?
Javaでは、2つのオブジェクトの属性値を比較するために、equals()メソッドをオーバーライドすることができます。equals()メソッドはObjectクラスに定義されているため、すべてのクラスがObjectクラスを継承しているため、カスタムクラスでこのメソッドをオーバーライドすることができます。
以下は、2つのPersonオブジェクトの属性値が等しいかどうかを比較するためにequals()メソッドをオーバーライドする方法を示す例です。
public class Person {
private String name;
private int age;
// 构造方法和getter/setter省略
@Override
public boolean equals(Object obj) {
// 首先判断两个对象是否引用同一个内存地址
if (this == obj) {
return true;
}
// 判断obj是否为Person类的实例
if (obj == null || getClass() != obj.getClass()) {
return false;
}
// 将obj转换为Person对象
Person person = (Person) obj;
// 比较name和age属性值是否相等
return age == person.age && Objects.equals(name, person.name);
}
}
上記の例では、まず2つのオブジェクトが同じメモリアドレスを参照しているかどうかを判断し、そうであればtrueを返します。次に、objがPersonクラスのインスタンスであるかどうかを確認し、そうでない場合はfalseを返します。最後に、objをPersonオブジェクトに変換し、nameとageの値を比較します。
属性値を比較するために、文字列の属性値を比較する際に==を使用する代わりに、Objects.equals()メソッドを使用して、2つのオブジェクトの属性値が等しいかどうかを比較することができます。Objects.equals()メソッドは、まず引数がnullかどうかを判断し、その後にオブジェクトのequals()メソッドを呼び出して比較するため、NullPointerExceptionを回避できます。