public class StringPool {
public static void main(String[] args) {
//只會在字符串池創建一份“aaa”,str1指向字符串池中的某個地址
String str1 = "aaa";
//先在字符串池創建一份“bbb”,然后聽從new的指示,在普通堆內存開辟空間存儲一份“bbb”
//str2指向普通堆內存空間上的一個地址
String str2 = new String("bbb");
//字符串池心里已經有了"bbb",不會再有第二份了。但是new還是要在普通內存空間存一份“bbb”
String str3 = new String("bbb");
// == 比較的是否是同一個對象(內存地址是否一樣)
// str.intern(),返回一個字符串池里的、和當前str的值equals的字符串的地址引用
System.out.println(str1 == "aaa".intern());
System.out.println(str2 == "bbb".intern());
//new調用一次,開辟一次普通內存空間
//但不論new多少次,相同value的字符串,字符串池只存一份
System.out.println(str2 == str3);
System.out.println(str2.intern() == str3.intern());
}
}