Java字串連線
阿新 • • 發佈:2019-02-07
由於字串不可變性,使得“abc” + "123" 會建立3個物件:"abc"、"123"、“abc123”。
而“abc” + "123" +"test"則會建立"abc"、“123”、“test”、"abc123" 、"abc123test"物件。
由於該過程產生了很多不必要的臨時物件,針對該情況有了StringBuider和StringBuffer類的出現。
但是由於+號使用起來簡單方便、可讀性較好,開發人員仍愛用+號,而不是那兩個類。
針對此情況,java做了許多的優化:
對於常量連線:
String str = "abc" + "123" + 1;
編譯後: String str =
對於與變數連線,
雖然StringBuilder可以使得不會建立中間字串,只會建立各個子串,但可讀性較差,因此仍然愛用+作為連線。針對這個情況從java 6開始,java編譯器採用了StringBuider進行拼接。
對於變數字串拼接,則會改為用StringBuilder進行連線:
String str2 = "abc";
str2 += "test";
編譯後:
String str2 = "abc";
str2 = (new StringBuilder()).append(str2).append("test").toString();
值得注意的是,迴圈中會建立額外的Stringbuider。
String str2 = "abc"; for(int i = 0; i < 3; i++){ str2 += "12243"; }
編譯後:
String str2 = "abc"; for(int i = 0; i < 3; i++) str2 = (new StringBuilder()).append(str2).append("12243").toString();
因此,在未用迴圈的情況下,可以使用+來連線,而用了迴圈還是用StringBuider為好。
以上過程,可以通過jad反編譯看到。將jad.exe放在java.exe同目錄即可。簡單命令為:jad -8 -r xxx.class