4 回答

TA貢獻(xiàn)1775條經(jīng)驗 獲得超8個贊
一般來說,你的問題的答案是“是”,但......
.equals(...)
只會比較它所寫的比較,不多也不少。如果一個類沒有覆蓋equals方法,那么它默認(rèn)為
equals(Object o)
覆蓋此方法的最近父類的方法。如果沒有父類提供覆蓋,那么它默認(rèn)為最終父類Object的方法,因此您將使用該
Object#equals(Object o)
方法。根據(jù)Object API,它與==
; 也就是說,當(dāng)且僅當(dāng)兩個變量引用同一個對象時,如果它們的引用是同一個,它才返回true 。因此,您將測試對象相等性而不是功能相等性。hashCode
如果你改寫equals
,總是記得覆蓋,以免“違反合同”。根據(jù)API,如果hashCode()
兩個對象的方法表明它們是等價的,那么從兩個對象的方法返回的結(jié)果必須相同equals
。反過來并不一定是真的。

TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊
關(guān)于String類:
equals()方法比較String實例(在堆上)中的“值”,而不管兩個對象引用是否引用相同的String實例。如果任何兩個String類型的對象引用引用相同的String實例那么太棒了!如果兩個對象引用引用兩個不同的String實例,則它沒有區(qū)別。它是正在比較的每個String實例中的“值”(即:字符數(shù)組的內(nèi)容)。
另一方面,“==” 運(yùn)算符比較兩個對象引用的值,以查看它們是否引用相同的String實例。如果兩個對象引用的值“引用”相同的String實例,則布爾表達(dá)式的結(jié)果將為“true”.. duh。另一方面,如果兩個對象引用的值“引用” 不同的String實例(即使兩個String實例具有相同的“值”,也就是說,每個String實例的字符數(shù)組的內(nèi)容都相同)布爾表達(dá)式的結(jié)果將為“false”。
與任何解釋一樣,讓它沉入其中。
我希望這可以解決一些問題。
添加回答
舉報