[英]Comparator interface's equals method, why it is always safe not to override Object.equals(Object)
[英]Why doesn't this equals method properly override the object.equals method?
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方法。 为什么?
equals
方法接收Object
,而不是Person
,并且对于不是Person
实例的任何参数,应返回false
。 例如:
@Override
public boolean equals (Object o) {
if (!(o instanceof Person)) {
return false;
}
Person p = (Person) o;
return p.name.equals(this.name);
}
这是因为Object
equals()
方法的签名是
public boolean equals(Object o)
注意输入的类型是Object
。 从技术上讲,替代不能是子类型,它必须是同一类型。 您的方法是重载而不是覆盖。
equals
方法的签名是
public boolean equals(Object other);
如果您考虑一下,那是因为您可能想将对象与不同类型的对象进行比较。
public boolean equals(Object obj)
是语法
但是请记住也要覆盖hashcode方法。
覆盖方法时,所有内容均应与您要覆盖的方法相同。
在您的情况下,equals方法使用的是Person,但最初它采用的是Object Type。
覆盖方法与其覆盖的方法具有相同的名称,数量和参数类型,并且返回类型相同。
参考: http : //docs.oracle.com/javase/tutorial/java/IandI/override.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.