==用于比較兩個變量的值是否相等,也就是比較兩個變量對應的記憶體中的數值是否相同。當比較兩個基本資料類型或判斷兩個引用變量是否指向同一個對象時,應該采用==操作符。
當一個引用變量指向一個對象類型時,此時涉及到兩塊記憶體。一個是對象自身的記憶體,另一個是這個變量的記憶體。比如Object o = new Object();new Object()是一塊記憶體,而這個變量o是另一塊記憶體,其儲存的值就是這個對象所占用的記憶體的首位址。是以如果要判斷兩個引用變量是否指向同一個對象時,應該采用==操作符。
equals用于比較兩個獨立對象的内容是否相同。比如如下代碼:
String a = new String("abc");
String b = new String("abc");這裡a 指向一塊記憶體,而b指向另一塊記憶體。是以表達式a==b将傳回false。而a.equals(b)傳回true,因為a、b所指向的兩個記憶體空間的内容是相同的。
當我們自定義了某個類,但沒有重寫Object的equals方法時,會預設采用Object的equals方法。Object的equals方法内部其實是采用==操作符的。也就是說如果我們建立了這個類的兩個相同内容的執行個體對象,即便我們使用equals方法進行比較,也會傳回false。是以我們應該根據實際需要重寫這個方法。