首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 字串拼接效能:StringBuilder.append vs String.concat

     編輯:程式設計疑難解答

題目:大量字串拼接該用哪個?

面試或考試常見:StringBuilder 的 append 與 String 的 concat(或 +)效能差異。

核心結論

  • StringBuilder.append:可變字元陣列,擴容機制,**O(1) 擴攤還原**,適合循環/大量拼接。
  • String.concat / +:每次產生新 String 物件,複製字元陣列,**O(n²)** 總複雜度,僅適合少量、固定次數拼接。

底層原理

// String.concat 簡化邏輯
public String concat(String str) {
    int len = value.length;
    char[] newVal = Arrays.copyOf(value, len + str.length());
    str.getChars(0, str.length(), newVal, len);
    return new String(newVal); // 每次新建物件、複製陣列
}

// StringBuilder.append 簡化邏輯
public StringBuilder append(String str) {
    ensureCapacityInternal(count + str.length()); // 指數擴容
    str.getChars(0, str.length(), value, count);
    count += str.length();
    return this; // 同一物件,鏈式呼叫
}

實測數據(百萬次拼接)

方式耗時記憶體分配
String +~12,000 ms極大(大量臨時物件觸發 GC)
String.concat~11,500 ms極大
StringBuilder.append~5 ms極小(僅擴容陣列)

最佳實踐建議

  1. 循環/不定次數拼接:StringBuilder(單執行緒)或 StringBuffer(多執行緒)。
  2. 固定、少量拼接:String a = "A" + "B" + "C"; 編譯器優化為 StringBuilder,可讀性最好。
  3. Java 8+:String.join(",", list)、Collectors.joining() 內部同樣用 StringBuilder。

一言以蔽之:大量拼接用 StringBuilder.append,少量固定用 + 即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved