java 重寫equals方法

由於Object類默認提供的equals方法,只是比較對象的地址,即其比較的結果和"=="的結果是一樣的.

而實際應用中,對象是否相等是由對象特徵所決定的,由此Object提供的equal方法,不可用,需要重寫.

而寫equals方法,應試滿足下列條件:

自反性:對任意X,X.equals(X)一定返回爲true;

對稱性:對任意X,Y,如果X.equals(Y)爲true,那麼Y.equals(X)也必須爲true;

傳遞性:對任意X,Y,Z,如果X.equals(Y)爲true,Y.equals(Z)爲true,那麼X.equals(Z)也必須true;

一致性:對任意X,Y,如果對象中用於比較的信息,沒有發生改變,那麼無論調用多少次X.equals(Y),或者Y.equals(X),其結果必須是一樣的.要麼一直爲true,要麼一直爲false;

對任何不是null的X,X.equals(null),必須爲false;


另:有部分人在equals()方法中,用了instanceof運算,但是其有一定問題.

instanceof判斷是的前面對象爲否爲類的實例或其子類,如果則返回true.


綜上,所以一般equals方法重寫爲:

package com.study;

/**
 * Created with IntelliJ IDEA.
 * User: KING
 * Date: 12-9-10
 * Time: 下午5:05
 */
public class Dog {
    int id;
    String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public boolean equals(Object obj) {
        //同一對象直接返回true;
        if (this == obj) {
            return true;
        }
        //只有當obj不爲空,且爲當前類時,才做對象特徵比較
        if (obj != null && obj.getClass() == Dog.class) {
            Dog dog = (Dog) obj;
            if (this.getId() == dog.getId()) {
                return true;
            }
        }
        return false;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章