When to use Java String, StringBuffer, or StringBuilder?

在 Java 開發中,處理文字字串是最常見的操作之一。然而,許多初學者仍容易混淆 StringStringBufferStringBuilder 的使用時機。

選擇錯誤的工具不僅會影響程式的執行效率(Performance),在多執行緒環境下更可能導致難以追蹤的 Bug。為了幫助大家徹底釐清這三者的差異,以下整理了一份綜合比較表,從底層架構到實際應用一目了然。

比較特性 String StringBuffer StringBuilder
可變性 (Mutability) 不可變 (Immutable) 可變 (Mutable) 可變 (Mutable)
執行緒安全 安全 安全 (synchronized) 不安全
效能速度 最慢 居中 最快
修改方式 產生新物件 原地修改 (Buffer) 原地修改 (Buffer)
主要操作方法 concat(), split(), substring(), + append(), insert(), delete(), reverse() append(), insert(), delete(), reverse()
方法傳回值 傳回新 String 傳回 this 傳回 this
儲存位置 字串池 / Heap Heap Heap
引入版本 Java 1.0 Java 1.0 Java 1.5

總結與建議

總結來說,這三者的選擇邏輯非常清晰:

  • 如果處理的是少量數據,或者字串內容不會改變,請直接使用 String
  • 如果須進行大量字串拼接(例如迴圈中組裝 SQL 或 JSON),且僅在單一執行緒中運行,StringBuilder 是最佳選擇。
  • 只有在明確需要多執行緒共享同一個可變字串時,才考慮使用 StringBuffer

掌握以上細節,不僅能讓程式碼跑得更快,也能展現 Java 記憶體管理與並行控制的專業理解。希望這份表格對您的開發工作有所幫助!

quick ways to initialize a list of numbers or strings in java

Java 快速建立整數與字串清單的寫法

在 Java 中,建立 List<Integer>List<String> 是非常常見的需求。 以下依照不同 JDK 版本,整理出幾種快速建立可修改(modifiable) 清單的寫法,可依個人習慣彈性使用。

1️⃣ JDK 5(2004)起支援的寫法

自 JDK 5 起,Java 引入了 泛型(Generics)自動封裝(Autoboxing),因此可以直接將 int 自動轉為 Integer


  Integer[] intArray = {1, 2, 3};
  String[]  strArray = {"A", "B", "C"};

  List<Integer> ints =
    new ArrayList<Integer>(Arrays.asList(intArray));

  List<String> strings =
    new ArrayList<String>(Arrays.asList(strArray));
  
✅ 適用於舊版系統(JDK 5 / 6)
✅ 清楚明確,但型別宣告較冗長

2️⃣ JDK 7(2011)起支援的寫法(鑽石運算子)

JDK 7 引入了 鑽石運算子(<>, 可讓編譯器自動推斷泛型型別,使程式碼更精簡。


  List<Integer> ints =
    new ArrayList<>(Arrays.asList(1, 2, 3));

  List<String> strings =
    new ArrayList<>(Arrays.asList("A", "B"));
  
✅ 語法更簡潔
✅ 仍然回傳可修改的 ArrayList

3️⃣ Java 9(2017)起支援的寫法(搭配 List.of

Java 9 引入了 List.of() 作為集合工廠方法, 可快速建立不可修改的清單。 若實務上仍需要可修改的清單,可再包裝成 ArrayList


  List<Integer> ints =
    new ArrayList<>(List.of(1, 2, 3));

  List<String> strings =
    new ArrayList<>(List.of("A", "B"));
  
✅ 語意清楚、現代化寫法
⚠️ List.of() 本身不可修改,需額外包裝

✅ 小結

  • JDK 5+:可使用泛型與自動封裝
  • JDK 7+:可使用鑽石運算子,讓程式碼更乾淨
  • Java 9+:可搭配 List.of() 撰寫更語意化的程式碼

實務上建議:
👉 需要可修改清單 ⇒ 使用 new ArrayList<>(...)
👉 元素固定不變 ⇒ 直接使用 List.of()

When to use Java String, StringBuffer, or StringBuilder?

在 Java 開發中,處理文字字串是最常見的操作之一。然而,許多初學者仍容易混淆 String 、 StringBuffer 與 StringBuilder 的使用時機。 選擇錯誤的工具不僅會影響程式的執行效率(Performance),在多執行...

總網頁瀏覽量