我能理解通過以下方式==
和object.equal(Object obj)
之間的區別是什麼? :「==」與「平等(obj對象)」
這是object.equal(Object obj)
返回true
如果兩個對象的值是相同的。雖然==
返回true
如果兩個類型和值的兩個的對象是相同的。
我能理解通過以下方式==
和object.equal(Object obj)
之間的區別是什麼? :「==」與「平等(obj對象)」
這是object.equal(Object obj)
返回true
如果兩個對象的值是相同的。雖然==
返回true
如果兩個類型和值的兩個的對象是相同的。
==
返回true,如果引用是完全一樣的。
equals(Object)
返回true時,該方法被寫入返回true。這可以是同一個對象,一個等同的對象或開發人員想寫的東西。
默認實現寫成
public boolean equals(Object obj) {
return (this == obj);
}
,所以你可以看到它做同樣的事情。
我只是問關於等於(對象obj) – 2012-01-01 18:57:50
的默認實現我會讀的源代碼,它不是很長,並會立即回答你的問題。 ;) – 2012-01-01 18:59:18
我明白了,謝謝! – 2012-01-01 19:05:40
object.equals(Object obj)
返回true
當對象根據對象的屬性相同取決於對象的類型以及該方法是否已經實現時。
==
返回true
當對象的實例是相同的。
java.lang.Object.equals
和==
的默認行爲是,如果引用a和b都指向同一個對象,則返回true;否則爲假。
如果你想比較值,你必須覆蓋等於。這就是String
和其他一些類型所做的。你不是免費的;你必須覆蓋從java.lang.Object
的方法。
最佳閱讀約書亞布洛赫的「有效的Java」 chapter 3,看看如何正確地做到這一點。
那麼,這兩者有什麼區別? – 2012-01-01 18:56:29
+1鏈接到布洛赫的章節。 – 2012-01-01 19:08:21
'=='總是指引用同一個對象。 「equals」的含義取決於您調用的「equals」方法的對象類型。 – 2012-01-01 19:10:04
的Object.Equals實現是:
public class Object {
public boolean equals(Object obj) {
return (this == obj);
}
}
這將返回true
只有當obj
是完全一樣的對象this
。就像Peter Lawrey在他的回答中所說的,任何其他類別的定義equals
完全取決於它是如何編碼的。甚至沒有要求兩個對象是相同的類,甚至沒有層次相關的類。
請注意,定義equals
而不定義hashcode
通常被認爲是不好的做法。要求兩個對象equal
必須返回相同的哈希碼。
不錯,謝謝。 – 2012-01-01 19:26:09
請注意'=='永遠不能改變含義,但'equals()'可以。 – 2012-01-01 19:14:57