这是Eclipse生成的代码:
id
是String
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
对我来说看起来很可疑的是:
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
有人可以向我解释它的作用吗?我认为它的作用是检查这个对象的id是否为null,如果另一个对象的id为null,那么该方法返回true?
这对我来说有点奇怪?
答案 0 :(得分:1)
根据eclipse ,如果有Person
个id == null
个对象,那么它们 相等 。如果它在您的上下文中不起作用,您可以将其删除
您可以使用以下代码替换它,以避免相同的
if (id == null || other.id == null) {
return false;
}
答案 1 :(得分:1)
.getClass()
测试后的整个部分可以改写为:
return id == null ? other.id == null : id.equals(other.id);
也就是说,Eclipse的默认.equals()
将生成代码,这样如果一个实例字段可以为null,那么如果另一个实例的字段也为null,它会认为相等(至少对于该字段)为true;否则它会比较这些值。
(请注意,在id
不为空但other.id
为空的情况下,这仍然有效,因为.equals()
合同规定任何对象o
, o.equals(null)
是假的)
现在,它可能适合您的需求,也可能不适合您;但Eclipse在这里做的事情对我来说似乎是合乎逻辑的。
除了它生成的代码太长了;)
请注意,它要求id
字段服从.equals()
合同!
此外,如果您使用Java 7,则代码更短:
return Objects.equals(id, other.id);
答案 2 :(得分:0)
如果两个对象的id
具有相同的值或者两个为空,则此方法返回true。
if (id == null) {
if (other.id != null)
return false;
此代码检查此对象的id
是否为null,并且另一个对象的id
是否为null,返回false
} else if (!id.equals(other.id))
return false;
在else中,因为我们知道id与null不同,我们可以调用方法equals of id,如果两个id
不相等则返回false
如果满足此条件,则返回true。