String str1 = "編程";
String str2 = "編程";
String str3 = new String("編程");
String str4 = str3.intern();
System.out.print(str1 == str2); // true
System.out.print(str1 == str3); // false
System.out.print(str1 == str4); // true
truefalsetrue
new String(...) 在堆內存創建新對象intern() 語義:若常量池已有相同內容字串,返回其引用;否則將此字串加入常量池並返回引用String Constant Pool (常量池) ┌─────────────────────┐ │ "編程" ← str1, str2, str4 └─────────────────────┘ Heap (堆) ┌─────────────────────┐ │ String Object "編程" ← str3 └─────────────────────┘
String s = new String("a") + new String("b"); s.intern() == s 結果?true(常量池記錄 s 引用),JDK 6 為 false核心記住:字面量進常量池,new 進堆,intern() 回常量池找/存引用。