一、先說明差別
== : 作用是判斷兩個對象的位址是不是相等。即,判斷兩個對象是不是同一個對象。ps:(基本資料類型==比較的是值,引用資料類型==比較的是記憶體位址)
equals() : 作用也是判斷兩個對象是否相等。但它一般有兩種使用情況:
情況1:類沒有覆寫 equals() 方法。則通過 equals() 比較該類的兩個對象時,等價于通過“==”比較這兩個對象。
情況2:類覆寫了 equals() 方法。一般,我們都覆寫 equals() 方法來兩個對象的内容相等;若它們的内容相等,則傳回 true (即,認為這兩個對象相等)。
情況1說明:當類沒有重寫equals方法,則使用Object的equals方法,見源碼可知,equals等價于==。
二、舉個栗子
public class test {
public static void main(String[] args) {
// a 為一個引用
String a = new String("ab");
// b為另一個引用,但是引用的對象内容一樣
String b = new String("ab");
// ab放在常量池中
String aa = "ab";
// 從常量池中查找ab
String bb = "ab";
// true
if (aa == bb)
System.out.println("aa==bb");
// false,不是同一對象,兩個位址不同。
if (a == b)
System.out.println("a==b");
// true
if (a.equals(b))
System.out.println("a equals b");
// true
if (42 == 42.0) {
System.out.println("true");
}
}
}