知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
[Android實作問題] why use equals not to use == in java
1樓
Hello Jarey,

請教一個問題,為什麼在Java中,如果要比較兩個物件的實質相等性,並不是使用==,而是必須透過equals()方法呢?

Thank you
小K

2樓
Java雖然沒有C的指標特性,但是Java還是有參照的特性。

如果你比較的資料是一個物件,像是常見的字串物件,如果你直接使用”==” 指比對的是這兩個

物件的參照位位置,也就是記憶體的索引位置,如果這兩個字串雖然內容一樣,但是其實是獨立

存放在兩塊不同的記憶體位置中,分別被兩個不同的變數所參照著, 可能A變數指到的是0x0001

這個位置,然後裡面放著"Hello"這個字串, B變數指到的是0x0002這個位置,裡面同樣放著

"Hello" 字串。你直接使用 A==B 回傳值會都是false,因為 0x0001 != 0x0002 ,你是直接針

對參照值(類似記憶體位置)去比對,而不是針對內容(記憶體中內容)去做比對,所以equals的用處

就是它會針對內容去做比對,如此才能比較出正確的字串結果。


我這邊只簡單的了舉了字串例子做說明,equals這個函式是Object內的函數,有許多時後你設計的

物件必須去覆寫實作這個函數,你必須自行決定這個物件的對等比較方式的依據,同時在覆寫了equals()

函式的同時,你也必須要注意要同時去覆寫hashCode()函式,由於篇輻有限,無法在此著墨太多1。以

下提供一些文章供你額外參考: