String str1 = "abcd"; String str2 = new String("abcd")
String a = "abcd"; String b = "abcd"; System.out.println(a==b); //結果爲true; System.out.println(a.equals(b)); // 結果爲true
用""建立的a,b兩個字符串 == 和 equals比較結果返回都爲true,這是由於a,b都指向了方法區的同一個字符串,因此當一樣的一個字符串用""重複建立時只是引用了方法區的這個字符串的值。java
String c = new String("abcd"); String d = new String("abcd"); System.out.println(c==d); //結果爲false; System.out.println(c.equals(d)); // 結果爲true
用new建立的兩個字符串,equals比較返回結果爲true,由於equals比較的是兩個字符串的值,而==爲false說明比較的時兩個字符串的引用,也就是指向的地址不相同,用new建立的字符串每次都會在JVM堆中建立,因此c,d實際上是引用兩個不一樣的字符串,因此==比較的結果固然爲false。code