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

Java StringBuilder 完整 API 指南:核心方法、效能優化、線程不安全特性與實戰範例

     編輯:Java 相關知識

一、StringBuilder 核心定位

  • 可變字串:內部 `char[]` / `byte[]` (JDK 9+ Compact Strings) 陣列,支援動態擴容
  • 非執行緒安全:無 `synchronized`,單執行緒效能優於 StringBuffer
  • 繼承體系:AbstractStringBuilder → StringBuilder / StringBuffer
  • 預設容量:16 字元,或 `參數長度 + 16`

二、核心方法分類速查

分類方法說明
建構子StringBuilder()容量 16
StringBuilder(int capacity)指定初始容量
StringBuilder(String str)內容初始化,容量 str.length()+16
StringBuilder(CharSequence cs)CharSequence 來源
新增append(...)尾部追加,支援所有基本型別、物件、CharSequence、陣列切片
appendCodePoint(int cp)追加 Unicode 碼點
insert(int offset, ...)指定位置插入,支援同 append 所有型別
重點:所有 append/insert 返回 this,支援鏈式調用
刪除delete(int start, int end)刪除 [start, end) 區間
deleteCharAt(int index)刪除單一字元
返回 this
修改replace(int start, int end, String str)區間替換
setCharAt(int index, char ch)單一字元替換
setLength(int newLength)截斷或擴展(補 \0)
查詢charAt(int index)單一字元
indexOf(String str) / indexOf(String str, int fromIndex)正向搜尋
lastIndexOf(String str) / lastIndexOf(String str, int fromIndex)反向搜尋
substring(int start) / substring(int start, int end)返回新 String
subSequence(int start, int end)返回 CharSequence
其他reverse()反轉序列,返回 this
capacity()當前容量
length()當前長度
trimToSize()容量縮減至長度
toString()生成新 String(複製內容)

三、實戰範例:核心 API 演示

1. 鏈式構建 SQL

StringBuilder sql = new StringBuilder(128);
sql.append("SELECT ")
   .append("id, name, email ")
   .append("FROM users ")
   .append("WHERE status = ")
   .append(1)
   .append(" AND created_at > '")
   .append(LocalDate.now().minusDays(30))
   .append("'");
System.out.println(sql); // 直接列印會呼叫 toString()

2. 高效字串拼接(避免 + 產生大量中間物件)

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append("Item ").append(i).append('\n');
}
String result = sb.toString(); // 僅一次物件建立

3. 插入與替換

StringBuilder sb = new StringBuilder("HelloWorld");
sb.insert(5, ", ");      // "Hello, World"
sb.replace(0, 5, "Hi");  // "Hi, World"
sb.setCharAt(0, 'h');    // "hi, World"

4. 反轉與搜尋

StringBuilder sb = new StringBuilder("racecar");
sb.reverse(); // "racecar" (回文)
System.out.println(sb.indexOf("cec")); // 2
System.out.println(sb.lastIndexOf("a")); // 4

四、效能優化關鍵

場景建議原因
大量拼接預估長度建構子 new StringBuilder(estimatedSize)避免多次擴容複製陣列
循環拼接循環外建立 StringBuilder,循環內 append避免每次迴圈 new 物件
最終輸出僅呼叫一次 toString()每次 toString() 都複製陣列
多執行緒改用 StringBuffer 或 ThreadLocalStringBuilder 非執行緒安全

五、JDK 9+ Compact Strings 變化

  • 內部改為 `byte[] value` + `byte coder` (LATIN1/UTF16)
  • 純 ASCII 字串節省 50% 記憶體
  • API 行為完全相容,無需修改代碼

六、常見誤區

  • StringBuilder sb = "abc"; ❌ 編譯錯誤,需 new StringBuilder("abc")
  • sb.append(obj) 會呼叫 obj.toString(),若 obj 為 null → 追加 "null" 字串
  • substring 返回 新 String,不影響原 StringBuilder
  • 不可直接用於 `switch`、`Map` key(需先 toString())
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved