2012-01-01 34 views
-2

我能理解通過以下方式==object.equal(Object obj)之間的區別是什麼? :「==」與「平等(obj對象)」

這是object.equal(Object obj)返回true如果兩個對象的值是相同的。雖然==返回true如果兩個類型值的兩個的對象是相同的。

+0

請注意'=='永遠不能改變含義,但'equals()'可以。 – 2012-01-01 19:14:57

回答

5

==返回true,如果引用是完全一樣的。

equals(Object)返回true時,該方法被寫入返回true。這可以是同一個對象,一個等同的對象或開發人員想寫的東西。

默認實現寫成

public boolean equals(Object obj) { 
    return (this == obj); 
} 

,所以你可以看到它做同樣的事情。

+0

我只是問關於等於(對象obj) – 2012-01-01 18:57:50

+1

的默認實現我會讀的源代碼,它不是很長,並會立即回答你的問題。 ;) – 2012-01-01 18:59:18

+0

我明白了,謝謝! – 2012-01-01 19:05:40

0

object.equals(Object obj)返回true當對象根據對象的屬性相同取決於對象的類型以及該方法是否已經實現時。

==返回true當對象的實例是相同的。

+0

你能解釋'相同'是什麼意思嗎?相同的類型和相同的值? – 2012-01-01 18:55:56

+0

這取決於你調用'equals'的類實際上是否實現了該方法。在一個可以比較所有字符的字符串中,如果它們是相同的,則返回true。 – Dimme 2012-01-01 18:58:06

+0

你可以考慮像equals方法用於字符串比較,==用於檢查對象標識(對象位置)! – Arung 2012-01-01 19:25:58

2

java.lang.Object.equals==的默認行爲是,如果引用a和b都指向同一個對象,則返回true;否則爲假。

如果你想比較值,你必須覆蓋等於。這就是String和其他一些類型所做的。你不是免費的;你必須覆蓋從java.lang.Object的方法。

最佳閱讀約書亞布洛赫的「有效的Java」 chapter 3,看看如何正確地做到這一點。

+0

那麼,這兩者有什麼區別? – 2012-01-01 18:56:29

+0

+1鏈接到布洛赫的章節。 – 2012-01-01 19:08:21

+0

'=='總是指引用同一個對象。 「equals」的含義取決於您調用的「equals」方法的對象類型。 – 2012-01-01 19:10:04

0

的Object.Equals實現是:

public class Object { 
    public boolean equals(Object obj) { 
     return (this == obj); 
    } 
} 

這將返回true只有當obj是完全一樣的對象this。就像Peter Lawrey在他的回答中所說的,任何其他類別的定義equals完全取決於它是如何編碼的。甚至沒有要求兩個對象是相同的類,甚至沒有層次相關的類。

請注意,定義equals而不定義hashcode通常被認爲是不好的做法。要求兩個對象equal必須返回相同的哈希碼。

+0

不錯,謝謝。 – 2012-01-01 19:26:09