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()方法。