細說 equals(o1,o2) 與 “o1 == o2” 區別?

equals(o1,o2) 與 “o1 == o2” 區別?

首先,equals(o1,o2)只能用於對象的比較,不能用於基本數據類型(如 int、double等8種)。
(1)那麼基本數據類型的相等比較用“==”而不能用equals().

接下來說,對象的相等比較,可以用equals(o1,o2) 與 “o1 == o2”,它們的區別是:

簡單說:equals(o1,o2)比較的是兩對象的內容;“o1 == o2”比較的是兩對象的地址。

詳述:

(1)先挑直觀的說,“o1 == o2”比較的是對象o1和o2在內存中是一個位置還是分存兩個位置?我們在操作對象時,都是通過引用變量來進行的。同一個對象,可以與多個引用變量掛鉤。換句話說,多個不同的引用變量可指向同一個對象(一個對象一個地址)。“o1 == o2”就是檢查引用變量o1與引用變量o2所指向是否爲同一個對象(同一個地址),所以又說“o1 == o2”比較的是對象的地址。

(2)包裝類型的對象比較時,是對應值的比較。Object有默認的equals方法使用的“==”比較對象地址,所有對象都繼承自Object,同樣繼承了equals方法。可重寫equals覆蓋,同時重寫hashCode()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章