为什么这个equals方法没有正确覆盖object.equals方法?

时间:2014-03-28 16:41:09

标签: java equals

public class Person{
    private String name;
    public Person(String name) {
         this.name = name;
    }
    public boolean equals (Person p){
         return p.name.equals(this.name);
    }
}

equals方法没有正确覆盖object.equals方法。为什么呢?

5 个答案:

答案 0 :(得分:2)

equals方法收到Object,而不是Person,并且对于任何非false实例的参数都应返回Person。 E.g:

@Override
public boolean equals (Object o) {
     if (!(o instanceof Person)) {
         return false;
     }
     Person p = (Person) o;
     return p.name.equals(this.name);
}

答案 1 :(得分:1)

这是因为equals()Object方法的签名是

public boolean equals(Object o)

请注意,输入的类型为Object。从技术上讲,覆盖不能是子类型,它必须是相同的类型。您的方法是重载而不是覆盖。

答案 2 :(得分:0)

equals方法的签名是

public boolean equals(Object other);

如果您认为这是因为您可能想要将对象与不同类型的对象进行比较。

答案 3 :(得分:0)

public boolean equals(Object obj) 

是语法

但请记住也要覆盖哈希码方法。

答案 4 :(得分:0)

覆盖方法时,所有内容都应与您尝试覆盖的方法相同。

在你的情况下,equals方法正在使用Person,但最初它采用了Object Type。

  

重写方法具有相同的名称,编号和类型   参数和返回类型作为它覆盖的方法。

参考:http://docs.oracle.com/javase/tutorial/java/IandI/override.html