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

Java 字串操作效能對比:String vs StringBuilder vs StringBuffer

     編輯:Java 綜合教學

Java 字串操作效能對比:String vs StringBuilder vs StringBuffer

字串拼接是 Java 開發高頻操作,選擇正確類別對效能影響巨大。本文從速度、線程安全、使用場景三個維度對比三者差異。

一、拼接速度對比

StringBuilder  >  StringBuffer  >  String
  • String: 不可變,每次拼接產生新物件,產生大量臨時物件觸發 GC,效能最差。
  • StringBuffer: 可變、線程安全,內部採用同步鎖,多線程下安全但單線程有鎖開銷。
  • StringBuilder: 可變、非線程安全,無同步開銷,單線程效能最佳。

二、線程安全性

類別線程安全適用場景
StringBuilder❌ 非安全單線程、高效能拼接
StringBuffer✅ 安全多線程共享字串緩衝區
String✅ 不可變天然安全常量、少量拼接、作為 Map Key

三、最佳實踐建議

  • 單線程大量拼接: 使用 StringBuilder (Java 5+ 推薦替代 StringBuffer)
  • 多線程共享緩衝區: 使用 StringBuffer 或加鎖保護 StringBuilder
  • 少量拼接/常量: 直接用 String 或 + 操作符 (編譯器優化為 StringBuilder)
  • 日誌輸出: 避免在 log.debug() 等可能不輸出的情況下預先拼接,使用佔位符 log.debug("user={}, id={}", name, id)

四、底層原理補充

  • 三者最終都操作 char[] 或 byte[] (Java 9+ Compact Strings)
  • StringBuilder / StringBuffer 繼承自 AbstractStringBuilder,擴容機制相同 (1.5倍 + 1)
  • Java 9+ 引入 StringConcatFactory,+ 操作符透過 invokedynamic 動態選擇最佳策略

參考來源: StackOverflow 經典討論

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