面試是經常被問到String
、StringBuilder
和StringBuffer
三者的速度有什麼區別,經過測試後,這三者的執行速度關係是:StringBuilder > StringBuffer > String
,測試過程如下:
public class TestStringTools {
public static void main(String[] args) {
// 測試String速度
System.out.println("String 開始時間"+System.currentTimeMillis());
String testString = "test";
for(int i=0; i<=100000; i++) {
testString = testString + "第" + i + "個";
}
System.out.println("String 結束時間"+System.currentTimeMillis());
// 測試StringBuilder速度
System.out.println("StringBuilder 開始時間"+System.currentTimeMillis());
StringBuilder testBuilder = new StringBuilder("test");
for(int i=0; i<=10000000; i++) {
testBuilder.append("第" + i + "個");
}
System.out.println("StringBuilder 結束時間"+System.currentTimeMillis());
// 測試StringBuffer速度
System.out.println("StringBuffer 開始時間"+System.currentTimeMillis());
StringBuffer testBuffer = new StringBuffer("test");
for(int i=0; i<=10000000; i++) {
testBuffer.append("第" + i + "個");
}
System.out.println("StringBuffer 結束時間"+System.currentTimeMillis());
}
}
由於用 String
做字符串拼接實在太慢了,因此我們這裏只進行10萬次
循環,而StringBuilder
和StringBuffer
進行1千萬次
循環,然後對結果進行比較:
String
進行10萬次字符串拼接,時間是:42354毫秒
;
StringBuilder
進行1千萬次字符串拼接,時間是:445毫秒
;
StringBuffer
進行1千萬次字符串拼接,時間是:755毫秒
。