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