2011-07-14 31 views
-3

下面是用的javadoc對象相等方法?

的等於Object類的方法實現對象上最挑剔的 可能等價關係;即,用於任何非空 參考值x和y,此方法返回true當且僅當x 和y指代相同的對象(X == y具有的值真)。

是否意味着object1.equals(object2)僅當object1 == object2時才返回true。當o1 == o2是真的

下面的例子在In Java, what is a shallow copy?

class Foo { private Bar myBar; ... 
public Foo shallowCopy() { 
Foo newFoo = new Foo(); newFoo.myBar = myBar; return newFoo; } 
public Foo deepCopy() { Foo newFoo = new Foo(); newFoo.myBar = myBar.clone(); //or new Bar(myBar) or myBar.deepCopy or ... return newFoo; } } Foo myFoo = new Foo(); 
Foo sFoo = myFoo.shallowCopy(); 
Foo dFoo = myFoo.deepCopy(); 

myFoo.myBar == sFoo.myBar => true 
myFoo.myBar.equals(sFoo.myBar) => true 
myFoo.myBar == dFoo.myBar => false 
myFoo.myBar.equals(dFoo.myBar) => true 

如果首先understading是正確的怎麼來myFoo.myBar.equals(dFoo.myBar)=>真

+3

如果你給問35個問題,你應該知道如何格式化你的代碼;) –

+2

你問34個以前的問題。尊重,你*真的應該*現在正確格式化的東西。請編輯您的問題並格式化塊引用,因此我們不必**猜測**他們開始和結束的位置,並對代碼進行格式化以使其可讀。當你問你的問題和它下面的預覽區時,右邊有一個方便的** How to Format **框。格式化和檢查結果中的34個問題應該是自動的。 *編輯*:@Amir已經很友善地爲你做,但實際上他不應該這樣做,這是人們爲新手做的事情。 –

+0

因不便而攜帶。我將在未來照顧它 –

回答

6

爲等於所述默認的實現是相同的==

然而,通常的做法是覆蓋此方法,並給它,其中兩個對象相等如果類型和內容是相同的實施方式。當==爲真時,它應該始終爲真。

+0

謝謝。 Actuaaly我感興趣約低於代碼myFoo.myBar.equals特定行(dFoo.myBar)=>真按我的理解,它應該是假作爲其深層副本ANF我們還沒有覆蓋equals方法 –

+0

這就是我說的關於。最符合邏輯的解釋,如果'Bar'有一個接受包含相同值的對象的equals方法。 –

0

沒有,o1.equals(o2)應返回true,但在其他情況下也可以返回true。

o1 == o2返回true如果O1和O2引用同一個對象,即同一塊內存。

但是我們在兩個對象是否是相同的基礎上比它們在內存中的位置等它們的屬性往往感興趣。例如,如果我執行new String("Hello World")兩次,然後這兩個字符串同一基於它們所代表的字符序列,但它們同一對象在內存中。

JavaDocs正在討論Object類本身提供的equals()的實現,當==運算符返回true時,它將返回true。在創建對象的子類時,可以重新實現equals方法以提供上述的相等方式。