Java Object類中的equals方法


  Object類中的equals方法用於檢測一個對象是否等於另外一個對象。在Object類中,這個方法將判斷兩個對象是否具有相同的引用。如果兩個對象具有相同的引用,它們一定是相等的。從這點上看,將其作為默認操作也是合乎情理的。然而,對於多數類來說,這種判斷並沒有什么意義。例如,采用這種方法比較兩個PrintStream對象是否相等就完全沒有意義。然而,經常需要檢測兩個對象狀態的相等性,如果兩個對象的狀態相等,就認為這兩個對象是相等的。

  下面采用以下示例演示equals方法的實現機制:

public class Employee{
    ...
    public boolean equals(Object otherObject){
        //快速檢查對象是否相同
        if(this==otherObject) return true;
        
        //如果EcPLID參數為空,則必須返回false
        if(otherObject==null) return false;
        
        //如果類不匹配,它們就不能相等。
        if(getClass()!=otherObject.getClass())
            return false;
        
        //現在我們知道另一個對象是非空雇員
        Employee other =(Employee)otherObject;
        
        //測試字段是否具有相同的值
        return Object.equals(other.name);
        && salary==other.salary
        && hireDay.equals(other.hireDay);
    }
}

  getClass方法將返回一個對象所屬的類,有關這個方法的詳細內容稍后進行介紹。在檢測中,只有在兩個對象屬於同一個類時,才有可能相等。

   提示:為了防備name或hireDay可能為null的情況,需要使用Object.equals方法。如果兩個參數都為null,Object.equals(a,b)調用將返回true;如果其中一個參數為null,則返回false;否則,如果兩個參數都不為null,則調用a.equals(b)。利用這個方法,Employee的方法equals的最后一條語句要改寫為:

return name.equals(name,other.name);
        && salary==other.salary
        && Object.equals(hireDay,other.hireDay);

  Java語言規范要求equals方法具有下面的特性:

  1) 自反性:對於任何非空引用x,x.equals(x)應該返回true。

  2) 對稱性:對於任何引用x和y,當且僅當y.equals(x)返回true,x.equals(y)也應該返回true。

  3) 傳遞性:對於任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也應該返回true。

  4) 一致性:如果x和y引用的對象沒有發生變化,反復調用x.equals(y)應該返回同樣的結果。

  5) 對於任何非空引用x,x.equals(null)應該返回false。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM