为什么equals方法必须具有相等运算符比较

时间:2014-03-24 07:17:27

标签: java

When we override equals method we write the code as below
 public boolean equals(Object obj) {
    //why do we need to use this piece of code
        **if (obj == this) {
            return true;
        }**

//以上两行有何帮助。相反,我不想在对象比较上使用== //我更喜欢删除上面两行。它会引起任何问题吗?

        if (obj == null || obj.getClass() != this.getClass()) {
            return false;
        }

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

4 个答案:

答案 0 :(得分:2)

性能改进以及一些逻辑意义。

如果你删除它,没有任何伤害。

但是,如果两者都指向同一个实例,则没有意义检查同一个实例上的条件。

如果true,它们始终是obj == this。认为

答案 1 :(得分:0)

由于引用的比较是非常有效的,并且对象肯定等于自己对引用(if(obj == this))的比较似乎是一种很好的做法。

答案 2 :(得分:0)

如果两个对象引用指向同一个对象,您会怎么做?一旦两者都指向同一个实例,就不需要实际检查它们内部的firstNamelastName是否相等。上面的代码是为了让你的逻辑在两个引用指向同一个对象时表现更好。它是一种干净,完美且良好的实践代码风格,可以充分发挥其性能。请不要删除它。

答案 3 :(得分:0)

== sign用于测量对象引用。如果要将Object与自身进行比较,则应始终为true。

在比较Object自身的属性时,不应有浪费,因为它们总是相等。

当两个对象在HEAP中引用不同的对象时应测量属性