1. 程式人生 > >Java字串連線

Java字串連線

由於字串不可變性,使得“abc” + "123" 會建立3個物件:"abc"、"123"、“abc123”。

而“abc” + "123" +"test"則會建立"abc"、“123”、“test”、"abc123" 、"abc123test"物件。

由於該過程產生了很多不必要的臨時物件,針對該情況有了StringBuider和StringBuffer類的出現。

但是由於+號使用起來簡單方便、可讀性較好,開發人員仍愛用+號,而不是那兩個類。

針對此情況,java做了許多的優化:

對於常量連線:

  String str = "abc" + "123" + 1;  

   編譯後:   String str =

"abc1231";

對於與變數連線,

雖然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