阿里規約里原話是:
【推薦】循環體內,字符串的連接方式,請使用 StringBuilder 的 append 方法進行擴展。(而不要用+String的方式)
說明:因為反編譯出的字節碼文件顯示每次循環都會 new 出一個 StringBuilder 對象,然后進行
append 操作,最后通過 toString 方法返回 String 對象,造成內存資源浪費。
從這句話得知,用StringBuilder連接字符串比 + 的方式好,因為更少占用內存資源。可是我們怎么才能更加直觀的看到性能對比呢?
這時我想到了時間開銷對比,我推測前者的運行時間比后者少,於是有了下面的測試代碼
@Test
public void mainTest1(){
long startTime1 = System.currentTimeMillis();
StringBuilder str1 = new StringBuilder("start");
for (int i = 0;i < 100000; i++){
str1.append(i);
}
long endTime1 = System.currentTimeMillis();
long time1 = endTime1 - startTime1;
System.out.println("StringBuilder所花時間:" + time1);
String str2 = "start";
long startTime2 = System.currentTimeMillis();
for (int i = 0;i < 100000; i++){
str2 = str2 + i;
}
long endTime2 = System.currentTimeMillis();
long time2 = endTime2 - startTime2;
System.out.println("String++所花時間:" + time2);
}
------------------------------------------------------
StringBuilder所花時間:8
String++所花時間:11866
----------------------------------------------------------------------------------------------------------
顯而易見。