什么是在java中覆盖等于方法的正确方法?

时间:2015-03-05 14:31:20

标签: java

public class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public boolean equals(Person p) {
        System.out.println("..............");
        return p.name.equals(this.name);
    }
}

嗨,我正在通过OCJP问答,回答这个问题是 equals方法没有正确覆盖Object.equlas方法。

我认为用名称来覆盖这里是多余的,但是这个问题的答案也不正确。

请指出我在这里缺少的概念......

注意:没有选项说明覆盖hasCode和equlas与此问题的参数相同...

2 个答案:

答案 0 :(得分:12)

equals的签名应为:

public boolean equals(Object p)

您的public boolean equals(Person p)方法未覆盖Object的{​​{1}}。它超载了它。

可能的实施:

equals

答案 1 :(得分:7)

@Override
public boolean equals(Object ob) {

    if (!(ob instanceof Person)) {
        return false;
    }

    Person p = (Person)ob;

    return p.name.equals(this.name);
}

ClassCastException证明
NullPointerException证明(Is null check needed before calling instanceof