Posted on 2009-08-08 12:38
BBT_soft 閱讀(2034)
評論(6) 編輯 收藏
《think in java》中有這么一段話:
如果想比較兩個對象的實際內容是否相同,又該如何操作呢?此時,必須使用所有對象都使用的特殊方法equals()。但這個方法不適用于"基本類型",基本類型直接使用==和!=即可。如:
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(ne.equals(n2));
正如我們預計的那樣,此時得到的結果是true。但事實上并不總是這么簡單!假設您創建了自己的類,像下面這樣:
class Value{
int i;
}
public class Test{
public static void main(String[] args){
Value v1 = new Value();
Value v2 = new Value();
System.out.println(v1.equals(v2));
}
}
此時的結果又變回了false!
這是由于equals()的默認行為是比較引用。所以除非在自己的新類中重載equals()方法,否則不可能表現出我們希望的行為。
大多數Java類庫都實現了用來比較對象內容的equals()方法,而非比較對象引用的equals()方法。
個人理解:equals()默認行為是比較引用,只是現在絕大多數Java類庫都實現了用來比較對象內容的equals()方法,而并沒有實現比較對象引用的equals()方法。所以現在說equals()比較的是內容,如果自己的類實現比較對象引用的equals()方法,也可以說equals()比較對象的引用,只是實現問題。