| 特性 | StringBuffer | StringBuilder |
|---|---|---|
| 線程安全 | ✅ 所有公共方法 synchronized | ❌ 非線程安全 |
| 性能 | 較低(鎖開銷) | 高(無鎖) |
| 引入版本 | JDK 1.0 | JDK 1.5 |
| 繼承關係 | 同父類 AbstractStringBuilder | 同父類 AbstractStringBuilder |
| API 兼容性 | 幾乎完全一致 | 幾乎完全一致 |
synchronized(sb) { sb.append(...); })append(String) // 追加,返回 this 支持鏈式
insert(int, String) // 指定位置插入
delete(int, int) // 刪除區間
reverse() // 反轉
toString() // 生成 String
setLength(int) // 截斷/擴容
capacity() // 當前容量
ensureCapacity(int) // 預分配
// StringBuilder ~15ms
// StringBuffer ~45ms (約 3 倍,鎖開銷)
StringBuilder sb = new StringBuilder(1_000_000); // 預分配避免擴容
for (int i = 0; i < 1_000_000; i++) sb.append('a');
String s = sb.toString();
char[] value(JDK 9+ 改為 byte[] + coder 緊湊字符串)newCapacity = (oldCapacity + 1) * 2toString() 在 JDK 9+ 共享底層數組(String(StringBuilder) 構造函數傳遞 value 引用),無拷貝開銷JDK 5 後新代碼首選 StringBuilder。只有明確多線程共享緩衝區時才用 StringBuffer。日常拼接字符串、構建 SQL、生成 JSON、日志構建等場景,new StringBuilder().append(...).toString() 是標準模式。