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