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

Java StringBuffer 深度解析:線程安全的可變字符串核心 API 與性能優化實戰

     編輯:Java 綜合教學

StringBuffer vs String vs StringBuilder 核心差異

特性StringStringBufferStringBuilder
可變性不可變可變可變
線程安全不可變天然安全同步方法,安全非同步,不安全
性能頻繁修改差中等單線程最優
適用場景常量、少量拼接多線程頻繁修改單線程頻繁修改

StringBuffer 初始化與轉換

// 空緩衝區,默認容量 16
StringBuffer sb1 = new StringBuffer();

// 指定初始內容
StringBuffer sb2 = new StringBuffer("abc");

// 指定初始容量(避免擴容開銷)
StringBuffer sb3 = new StringBuffer(100);

// 相互轉換
String str = "hello";
StringBuffer sb4 = new StringBuffer(str);  // String → StringBuffer
String str2 = sb4.toString();              // StringBuffer → String

核心修改操作方法詳解

1. append() - 高效拼接

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM user WHERE ")
   .append("name = '").append(userName).append("'")
   .append(" AND pwd = '").append(password).append("'");

鏈式調用返回 this,避免創建中間 String 對象,SQL 拼接首選。

2. insert() - 指定位置插入

StringBuffer sb = new StringBuffer("TestString");
sb.insert(4, "False"); // 結果: "TestFalseString"

3. delete() / deleteCharAt() - 刪除操作

sb.delete(1, 4);        // 刪除索引 [1,4) 區間字符
sb.deleteCharAt(0);     // 刪除指定索引單字符

4. reverse() - 反轉

new StringBuffer("abc").reverse(); // "cba"

5. setCharAt() / replace() - 修改替換

sb.setCharAt(1, 'D');           // 單字符替換
sb.replace(0, 3, "XYZ");        // 區間替換

6. trimToSize() - 釋放多餘容量

將底層字符數組縮減至當前長度,釋放未使用內存。

性能優化關鍵點

  • 預估容量:new StringBuffer(estimatedSize) 減少擴容複製
  • 避免 toString() 後繼續修改:toString() 可能共享底層數組,後續修改觸發複製
  • 單線程場景優先 StringBuilder:無同步開銷,性能提升 10-15%
  • 大量拼接考慮 CharArrayWriter:更底層的字符緩衝流

源碼級理解:擴容機制

// 簡化版擴容邏輯
private void expandCapacity(int minimumCapacity) {
    int newCapacity = (value.length + 1) * 2;
    if (newCapacity < minimumCapacity) newCapacity = minimumCapacity;
    if (newCapacity < 0) throw new OutOfMemoryError();
    value = Arrays.copyOf(value, newCapacity);
}

每次擴容約為 2 倍,預設初始 16 字符,頻繁擴容會產生大量臨時數組增加 GC 壓力。

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