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

Java 字串三大類深度解析:String vs StringBuffer vs StringBuilder

     編輯:Java 相關知識

核心差異速覽

特性StringStringBufferStringBuilder
可變性不可變可變可變
線程安全是(不可變天然安全)是(方法 synchronized)否
效能頻繁拼接極差中等(同步開銷)最高(無同步)
適用場景常量、少量拼接多線程環境大量拼接單線程大量拼接

底層機制深度剖析

String 不可變的代價

每次拼接 s += "x" 實際產生:新 StringBuilder → append → toString() → 新 String。循環 1 萬次約產生 4 萬對象,觸發頻繁 GC,效能指數級下降。

JVM 編譯期優化

// 編譯期常量折疊
String s1 = "a" + "b" + "c"; // 直接變為 "abc",零開銷

// 變量拼接無法優化
String a = "a", b = "b", c = "c";
String s2 = a + b + c; // 運行期仍建立 StringBuilder

StringBuffer vs StringBuilder

兩者繼承自 AbstractStringBuilder,方法幾乎相同。StringBuffer 所有公共方法加 synchronized,單線程下每次操作需獲取/釋放鎖,效能損耗約 10-15%。

實測數據(10 萬次拼接)

String      : ~980 ms
StringBuffer: ~2 ms
StringBuilder: ~1 ms

最佳實踐策略

  1. 原則:大量拼接用 StringBuilder(單線程)或 StringBuffer(多線程)。
  2. 避免:循環中使用 + 拼接 String。
  3. 預設容量:new StringBuilder(1024) 減少擴容複製。
  4. 方法內部:優先 StringBuilder,用完即棄,無線程洩漏風險。
  5. 全局/共享:必須用 StringBuffer 或額外同步機制。
  6. 不確定環境:寧用 StringBuffer,除非確定為瓶頸且單線程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved