1. 程式人生 > >在定義類時,何時需要重寫Object類中equals()方法?

在定義類時,何時需要重寫Object類中equals()方法?

在比較兩個物件時可以使用==和 equals()。==用於比較兩個物件的引用地址是否相等,而equals()方法主要用於比較兩個物件的內容是否相等。和equals()的差別請參見“和equals()有什麼區別?”的解答。
在 Object 中已定義了 equals()方法,但是該方法直接採用
操作符實現,因此子類如果不重寫該方法,那麼子類物件在比較時將使用 Object 中定義的 equals(),其結果與
操作符的比較結果是一樣的。
在Java API 中,有很多常用類都重寫過equals()方法,例如String、Integer 和Double 等,使用equals()方法可以很方便地比較這些物件的內容是否相等。因此為了方便比較類物件內容是否相等,在定義類時一般都建議重寫equals()方法。
重寫equals()方法的示例程式碼如下:
public class Person
{
//編號
private String id;
//姓名
private String name;
//覆蓋equals()方法
public boolean equals(Object obj)
{
//判斷obj是否為null,如果為null,返回false
if (obj = = null)
{
return false;
}
//判斷測試的是否為同一個物件,如果是同一個物件返回true
if(this == obj)
{
return true;
}
//判斷它們的型別是否相等,如果不相等返回false
if(this.getClass()!= obj.getClass())
{
return false;
}
//將引數中傳入的物件造型為Person型別
Person c = (Person)obj;
return id.equals(

c.id) && name.equals(c.name);
}
}
注意:在重寫equals()方法的同時,一般都相應地重寫hashCode()方法