String s1 = "a" 時,首先會在字符串常量池中查找有無 “a” 這個對象。 若沒找到,就創建一個 "a" 對象,
然后,以 s1 為它的引用。若在字符串常量池中找到了 “a” 這個對象, 同樣也將 s1 作為它的引用。
若再執行一次 String s2 = "a" , 那么 s1 和 s2 都是同一個對象的引用,即 邏輯判斷 s1 == s2 的結果是 true。
String s3 = new String("a") 時,將在字符串常量池外的堆里,創建一個 "a" 對象,
然后,以 s3 為它的引用。這時,s3 對應的是 字符串常量池外的一個對象。因此,無論 s3 == s2,還是 s3 ==s1,其結果都是 false。
1 public class Demo { 2 public static void main(String[] args) { 3 String s1 = "a"; 4 String s2 = "a"; 5 String s3 = new String("a"); 6 System.out.println(s1 == s2);// true
7 System.out.println(s1 == s3);// false
8 System.out.println(s2 == s3);// false
9 } 10 }
結果為:
1 true
2 false
3 false
