字串拼接是 Java 開發高頻操作,選擇正確類別對效能影響巨大。本文從速度、線程安全、使用場景三個維度對比三者差異。
StringBuilder > StringBuffer > String
| 類別 | 線程安全 | 適用場景 |
|---|---|---|
| StringBuilder | ❌ 非安全 | 單線程、高效能拼接 |
| StringBuffer | ✅ 安全 | 多線程共享字串緩衝區 |
| String | ✅ 不可變天然安全 | 常量、少量拼接、作為 Map Key |
StringBuilder (Java 5+ 推薦替代 StringBuffer)StringBuffer 或加鎖保護 StringBuilderString 或 + 操作符 (編譯器優化為 StringBuilder)log.debug("user={}, id={}", name, id)char[] 或 byte[] (Java 9+ Compact Strings)StringBuilder / StringBuffer 繼承自 AbstractStringBuilder,擴容機制相同 (1.5倍 + 1)StringConcatFactory,+ 操作符透過 invokedynamic 動態選擇最佳策略參考來源: StackOverflow 經典討論