Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Nối chuỗi trong Java: +, concat(), StringBuilder, StringJoiner

Java cung cấp nhiều cách nối chuỗi, mỗi cách có ưu nhược điểm riêng.

1. Toán tử + – Đơn giản, compiler tối ưu thành StringBuilder


String s = "Hello" + " " + "World"; // Compile-time constant → "Hello World"
String a = "Hello";
String b = a + " World"; // Runtime → new StringBuilder().append(a).append(" World").toString()

2. String.concat() – Chỉ nối 2 chuỗi, trả về String mới


String s = "Hello".concat(" World"); // "Hello World"
// Chuỗi rỗng: "Hello".concat("") → "Hello" (tối ưu trả về this)

3. StringBuilder – Hiệu năng tốt nhất cho nhiều lần nối


StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i).append(",");
}
String result = sb.toString();

4. StringBuffer – Thread-safe version của StringBuilder


StringBuffer sbf = new StringBuffer();
sbf.append("Thread-safe");

5. String.join() / StringJoiner (Java 8+) – Có delimiter


String csv = String.join(",", "a", "b", "c"); // "a,b,c"
StringJoiner sj = new StringJoiner(",", "[", "]");
sj.add("a").add("b");
System.out.println(sj); // "[a,b]"

So sánh hiệu năng (100,000 lần nối)

Phương phápThời gian (ms)Bộ nhớGhi chú
+ trong loop~5000Cao (GC pressure)❌ Không bao giờ
concat() trong loop~4500Cao❌
StringBuilder~15Thấp✅ Best
StringBuffer~25ThấpThread-safe
String.join~30Trung bìnhArray/Iterable

Khuyến nghị

  • Nối vài chuỗi tĩnh: dùng + (đọc dễ)
  • Nối trong loop / nhiều chuỗi: StringBuilder
  • Cần delimiter: String.join() hoặc StringJoiner
  • Đa luồng chia sẻ buffer: StringBuffer