標籤:
Java裡可以用兩種方法來建立一個String:
String x = "abc";String y = new String("abc");
這兩種方法有什麼不同?
1. 雙引號 Vs. 建構函式
用兩個簡單的代碼來回答這個問題。
Example 1:
String a = "abcd";String b = "abcd";System.out.println(a == b); // TrueSystem.out.println(a.equals(b)); // True
在JVM 方法區,a和b指向同一個String字面量,記憶體引用是相同的,所以a==b。
當建立多個相同的String字面量時,只有一個相同的String字面量被儲存下來。這稱為字串的駐留(string interning)。Java 中所有常量String都會自動被駐留。
Example 2:
String c = new String("abcd");String d = new String("abcd");System.out.println(c == d); // FalseSystem.out.println(c.equals(d)); // True
JVM堆heap中c和d指向兩個不同的對象,所以c==d值為假。不同的對象有不同的記憶體引用。
示範了這兩種情景:
2. 運行期字串駐留String Interning
即使兩個String是用建構函式(new String(""))構建,在運行期也會執行字串駐留。
String c = new String("abcd").intern();String d = new String("abcd").intern();System.out.println(c == d); // Now trueSystem.out.println(c.equals(d)); // True
3. 如何使用
如果僅僅需要建立一個字串,你需要使用雙引號方式建立字串。如果你需要在堆裡新建立一個字串對象時,可以考慮使用建構函式方式建立字串。這裡有個建構函式用例參考。
原文:http://www.programcreek.com/2014/03/create-java-string-by-double-quotes-vs-by-constructor/
字串駐留參考:
http://blog.csdn.net/biaobiaoqi/article/details/6892352
http://java-performance.info/string-intern-in-java-6-7-8/
Programcreek -Java基礎之String---用""還是用new String("")