2017-10-12 145 views
-2

讓我們在Java中說我有一個A類和延伸A.在Java中關於equals方法對象和類

注意B類:類A和B 在他們的equals方法!

我做的:

A a = new B(); 
B b = new B(); 
a.equals(b); 

它配備了假的。我認爲,當我們做到平等時,它動態地綁定到a和b,這會使它成爲現實。或者是因爲在編譯時它看起來是a,並假設equals將是equals(A),並且因爲它的B爲B b = new B();它說錯了?還是我在兩條戰線上都錯了?

+2

如果你沒有定義一個'equals()'方法,那麼默認的'equals()'方法(爲所有的'Object'定義)與'=='相同。這意味着只有當對象是同一個對象時(它不會查看對象中的任何數據)它纔會返回「true」。您創建了兩個對象,因此它們不一樣。 – ajb

+0

鑑於'a'和'b'清楚地指向不同的對象,爲什麼會期望通過'a.equals(b)'比較它們是'真實的'? – dave

+0

如果你爲'B'定義了一個'equals()'方法,那麼'a.equals(b)'確實會調用這個方法。所以你幾乎是正確的 - 'equals'動態綁定。但是當你沒有定義它時會發生什麼,你錯了。 – ajb

回答

4

如你不重寫equals它將使用Object的方法

如果你看看源代碼,對象

@param obj the reference object with which to compare. 
public boolean equals(Object obj) { 
    return (this == obj); 
} 

顯然a有不同的refernce到b從而false

+0

啊,我幫你了!我出於某種原因,對象等於參數有if(instanceOf)或其他什麼的印象。謝謝所有的澄清! – Newb18