字串的建立辨析
String s="1"
*使用引號建立字串會在常量池中尋找 有則直接返回 沒有則建立
String s=new String("1");
*使用new建立 如果常量池沒有"1" 則在常量池中建立"1" 再在堆中建立String並返回地址給引用
*使用s.intern()如果常量池中沒有與字串相同的字串(判斷邏輯 呼叫equals)則加入物件的引用(1.7及之後 常量池移入堆)
注:上述程式碼 呼叫s.inertn()之前 常量池中已存在"1"的物件 故相當於沒有呼叫
String s=new String("1")+new String("1")
s.intern()
注:該例子中 使用StringBuilder建立字串 常量池中不存在"11"的物件 故將s.引用加入常量池
參考部落格連結 深入解析String#intern