2013-08-22 513 views
0

我有一個下列問題 我有兩個空的對象,我使用equals()方法對它們進行比較,因爲我們知道equals方法比較對象的內容,但在這種情況下,我沒有任何屬性我的目標比較空對象

Object ob1 = new Object(); 
    Object ob2 = new Object(); 
    if(ob1.equals(ob2)){ 
     System.out.println(" they are Equal"); 
    } 
    else{ 
     System.out.println("not equal"); 
    } 
    if(ob1 == ob2){ 
     System.out.println(" they are Equal"); 
    } 
    else{ 
     System.out.println("not equal"); 
    } 

我們知道==將比較對象

會有什麼equals方法比較這裏的參考?

在此先感謝...

+1

對不起 - 不得不投票,因爲這在JavaDocs中很明顯得到了回答。 –

+1

'equals()'不會像您認爲的那樣比較對象的內容。它在被調用的對象的類中使用'equals()'的實現來比較對象。這個'equals()'方法可以根據對象的類型做各種不同的事情。在Object中,如果兩個實例完全相同,equals()會認爲兩個實例相等。 –

+1

它與'=='運算符做同樣的事情。看看Objest.equals來源。 – aim

回答

2

它也將比較參考,如前所述here

的equals方法實現非空對象引用的等價關係:

這是反身:對於任何非空引用值x,x.equals(x)應該返回true。
它是對稱的:對於任何非空引用值x和y,x.equals(Y),當且僅當y.equals(x)返回真應返回true。
傳遞性:對於任何非空引用值x,y和z,如果x.equals(y)的返回true並且y.equals(z)的返回true,那麼x.equals(z)的應返回true。
它是一致的:對於任何非空引用值x和y,x.equals(Y)的多個調用始終返回true或始終返回假,沒有設置中使用的信息等於在對象上比較被修改。
對於任何非空引用值x,x.equals(空)應該返回false。

3

Object.equals的JavaDoc:

的等於Object類方法實現對象上差別可能性最大的等價關係;也就是說,對於任何非空引用值x和y,當且僅當x和y引用同一對象(x == y的值爲true)時,此方法返回true。

1

如果兩個對象是null然後

if(ob1==null && ob2==null) 

如果你嘗試做ob1.equals(null)你會得到NullPointerException。由於ob1它自己null

0
  1. ==運算符比較對象的基準或內存位置中的堆,它們是否指向相同的位置與否。

  2. equals()方法的主要目的是2比較兩個對象或對象的內容的狀態。

但是,你正在使用Objectequals()方法。

equals()方法的對象類默認實現像==一樣工作,意味着它將檢查對象的內存引用,如果它們指向相同的位置。

注意: 這個默認實現被覆蓋,以在像String,Wrapper類這樣的類中進行內容比較。

0

雖然沒有什麼X.equals(Y)應該是指一些不一致(即什麼是「問題」應該是回答),兩個有用的問題是:

  • 當對象按規定使用,應該更換一些參考X參考Y預計不會改變他們的行爲?

  • 當如預期使用目的,將交換所有引用X與引用Y反之亦然,預計不會改變自己的行爲?

如果定義hashCode()爲所有空的對象返回相同的值Object,並equals來比較任意兩個空的對象,對方的時候返回true,這些定義便會符合#1。在另一方面,它定義equals測試參考平等和hashCode任何對象返回identityHashCode滿足#1(如果XY是不同的情況下,該事實X.equals(X)是真實的,但Y.equals(X)是假是,在和本身,充分的理由把它們當作不同。

雖然這是值得商榷的Object是否應該有一個具體的類型,只有使用Object一個實例是作爲身份象徵。因此,這一事實,Object是一個具體的類型意味着它的方法應該測試標識符TY。