繁体   English   中英

为什么此equals方法不能正确覆盖object.equals方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM