试图理解Eclipse生成的equals方法

时间:2014-02-28 09:45:13

标签: java eclipse equals

这是Eclipse生成的代码:

idString

@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?

这对我来说有点奇怪?

3 个答案:

答案 0 :(得分:1)

根据eclipse ,如果有Personid == 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()合同规定任何对象oo.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。