package com.jtzen9;
public
class
main
system.out.println(system.currenttimemillis()-time);
string str2 = "a";
time = system.currenttimemillis();
for (int i = 0; i < 50000; i++)
system.out.println(system.currenttimemillis()-time);
time = system.currenttimemillis();
stringbuilder stringbuilder = new stringbuilder("a");
for (int i = 0; i < 50000; i++)
string str3 = stringbuilder.tostring();
system.out.println(system.currenttimemillis()-time);}}
程式輸出:
concat源**:
public string concat(string str)
// 獲取原字串的字元陣列的長度
int len = value.length;
// 將原字串的字元陣列放到buf陣列中
char buf = arrays.copyof(value, len + otherlen);
// 追加的字串轉化成字元陣列,新增到buf中
str.getchars(buf, len);
// 產生乙個新的字串
return
new string(buf, true);
}
整體是乙個陣列的拷貝,雖然在記憶體中是處理都是原子性操作,速度非常快,但是,最後的return語句建立乙個新string物件,也就是每次concat操作都會建立乙個新的string物件,這也是限制concat方法速度的原因。
// 如果是null值,則把null作為字串處理
if (str == null)
int len = str.length();
// 追加後的字元陣列長度是否超過當前值
ensurecapacityinternal(count + len);
// 字串複製到目標陣列
str.getchars(0, len, value, count);
count += len;
return
this;
}int c = count;
ensurecapacityinternal(c + 4);
final char value = this.value;
value[c++] = 'n';
value[c++] = 'u';
value[c++] = 'l';
value[c++] = 'l';
count = c;
return
this;
}private
void
ensurecapacityinternal(int minimumcapacity)
(1)
string str = "my name is ";
str = str + "jtzen9";
(2)
string str = "my name is " + "jtzen9";
jvm會直接把str作為乙個物件,即 「my name is jtzen9」 c 字串拼接效率
1 對於少量固定的字串拼接,如string s a b c 系統會優化成s string.concat a b c 不會新建多個字串。如果寫成string s a s b s c 則會建立三個新的字串。可見,它和stringbuilder有著相似的效率,比用 的拼接方式高效,並且 易於閱讀。stri...
再談「字串拼接」的效率
拼接字串,大體分為兩種方式,一種通過 號拼接 方式1 這種方式在ie6中效率是極其低下的,因此就出現了第二種方式 採用陣列儲存,最後通過join拼接,這種方式的效率在ie6下對比會發現速度差異非常大。此外還有很多朋友估計沒有注意過,陣列拼接的方式又分為兩種,一種是通過push將字串放入陣列 方式2 ...
再談「字串拼接」的效率
拼接字串,大體分為兩種方式,一種通過 號拼接 方式1 這種方式在ie6中效率是極其低下的,因此就出現了第二種方式 採用陣列儲存,最後通過join拼接,這種方式的效率在ie6下對比會發現速度差異非常大。此外還有很多朋友估計沒有注意過,陣列拼接的方式又分為兩種,一種是通過push將字串放入陣列 方式2 ...