gpt4 book ai didi

java - 为什么重写 equals() 方法的 return 语句必须使用交替的 && 和 || ?

转载 作者:行者123 更新时间:2023-12-01 21:40:27 26 4
gpt4 key购买 nike

我在网上看到了下面的代码。该类重写了 Object 类的 hashCode() 和 equals 方法。我只是想知道为什么 equals() 方法的 return 语句必须使用交替的 && 和 || ?我可以一直使用 && 吗?是否有任何特殊原因必须使用替代 && 和 ||?

class Person {

private int id;
private String firstName;
private String lastName;

@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}

Person guest = (Person) obj;
return id == guest.id
&& ((firstName == null ? guest.firstName == null : firstName.equals(guest.firstName))
|| (firstName != null && firstName.equals(guest.getFirstName())))
&& ((lastName == null ? guest.lastName == null : lastName.equals(guest.lastName))
|| (lastName != null && lastName.equals(guest.getLastName())));
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + id;
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}



}

最佳答案

两个析取都可以替换为 || 的第一个操作数,因为第二个运算符再次覆盖了十元运算符的第二个选择(假设 getter 返回字段值)

 id == guest.id
&& (firstName == null ? guest.firstName == null : firstName.equals(guest.firstName))
&& (lastName == null ? guest.lastName == null : lastName.equals(guest.lastName));

但我建议将其重写为

id == guest.id
&& Objects.equals(firstName, guest.firstName)
&& Objects.equals(lastName, guest.lastName);

关于java - 为什么重写 equals() 方法的 return 语句必须使用交替的 && 和 || ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com