首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

StringBuilder vs StringBuffer:線程安全與性能的權衡

     編輯:Java 綜合教學

StringBuilder vs StringBuffer:線程安全與性能的權衡

核心差異一覽

維度StringBuilderStringBuffer
線程安全❌ 非線程安全✅ 同步方法,線程安全
性能⚡ 單線程下極快🐢 同步開銷,慢 10-15%
繼承關係同繼承 AbstractStringBuilder同繼承 AbstractStringBuilder
JDK 版本1.5 引入1.0 即有

底層實現共性

  • 內部維護 char[] value(JDK 9+ 為 byte[] + coder)。
  • 擴容策略:newCapacity = (oldCapacity << 1) + 2(約 2 倍)。
  • append/insert/delete 等操作均直接修改內部數組,不創建新對象,避免 String 不可變帶來的大量 GC。

選型決策樹

需要可變字符串?
  ├─ 多線程共享實例? → StringBuffer
  └─ 單線程 / 線程局部? → StringBuilder(首選)

常見誤區

  • ❌ String s = ""; for(...) s += x; → 每次循環隱式創建 StringBuilder + toString,極慢。
  • ✅ StringBuilder sb = new StringBuilder(); for(...) sb.append(x); String s = sb.toString();
  • ❌ 以為 StringBuffer 絕對安全:複合操作(如 if(sb.length()>0) sb.deleteCharAt(0))仍需外部同步。

String 對比

場景推薦
少量拼接、常量String(編譯期優化)
大量拼接、構建 SQL/JSONStringBuilder
多線程日志緩衝StringBuffer 或 ThreadLocal
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved