1.4 == 與 equals
== : 它的作用是判斷兩個對象的地址是不是相等。即,判斷兩個對象是不 是同一個對象。(基本數(shù)據(jù)類型==比較的是值,引用數(shù)據(jù)類型==比較的是內(nèi)存 地址)
equals() : 它的作用也是判斷兩個對象是否相等。但它一般有兩種使用情況:?
情況 1:類沒有覆蓋 equals() 方法。則通過 equals() 比較該類的兩個對 象時,等價于通過“==”比較這兩個對象。?
情況 2:類覆蓋了 equals() 方法。一般,我們都覆蓋 equals() 方法來兩 個對象的內(nèi)容相等;若它們的內(nèi)容相等,則返回 true (即,認(rèn)為這兩個對象相等)。 .
public class test1 { public static void main(String[] args) {?
????String a = new String("ab"); // a 為一個引用?
????String b = new String("ab"); // b 為另一個引用,對象的內(nèi)容一樣?
????String aa = "ab"; // 放在常量池中?
????String bb = "ab"; // 從常量池中查找
????if (aa == bb){?// true?
????????System.out.println("aa==bb");?
}
?if (a == b) {// false,非同一對象?
????????System.out.println("a==b");?
}
????if (a.equals(b)) {// true?
????????System.out.println("aEQb");?
}
????if (42 == 42.0) { // true?
????????System.out.println("true");?
}
}
}?
說明:?
????String 中的 equals 方法是被重寫過的,因為 object 的 equals 方法是 比較的對象的內(nèi)存地址,而 String 的 equals 方法比較的是對象的值。?
????當(dāng)創(chuàng)建 String 類型的對象時,虛擬機(jī)會在常量池中查找有沒有已經(jīng)存在的 值和要創(chuàng)建的值相同的對象,如果有就把它賦給當(dāng)前引用。如果沒有就在常量池 中重新創(chuàng)建一個 String 對象。