Java字符串拼接推荐:简单场景用+(编译器优化),循环或动态拼接用StringBuilder(高效、非线程安全),多线程共享时用StringBuffer(线程安全),数组/集合用String.join(),格式化用MessageFormat。

Java中字符串拼接有多种方式,选择哪种取决于场景:是否在循环中、是否需要高性能、代码可读性要求高低等。最常用且推荐的是 StringBuilder(多线程不安全但快)和 StringBuffer(线程安全但稍慢),而简单拼接用 + 运算符也完全可行——编译器会自动优化成 StringBuilder。
用 + 号拼接(适合简单、少量字符串)
这是最直观的方式,适用于常量或变量不多、不在循环中的场景:
String s1 = "Hello";
String s2 = "World";
String result = s1 + ", " + s2 + "!"; // 结果:"Hello, World!"
注意:虽然写法简洁,但如果在循环里反复用 + 拼接,每次都会创建新 String 对象,性能差。JDK 8+ 编译器会对局部的 + 做优化,但逻辑上仍是不可变对象的复制。
立即学习“Java免费学习笔记(深入)”;
用 StringBuilder 拼接(推荐用于动态拼接)
StringBuilder 是可变字符序列,内部基于 char[],append() 方法复用同一块内存,效率高:
- 创建后调用 append() 多次追加内容,最后 toString() 得到结果
- 非线程安全,单线程下性能最优
- 可指定初始容量避免数组扩容(如 new StringBuilder(64))
StringBuilder sb = new StringBuilder();
sb.append("Name: ").append(name).append(", Age: ").append(age);
String result = sb.toString();
用 StringBuffer 拼接(需线程安全时使用)
API 和 StringBuilder 几乎一样,但所有方法都加了 synchronized,适合多线程共享拼接场景:
StringBuffer sb = new StringBuffer();
sb.append("Thread-safe: ").append(value);
String result = sb.toString();
一般业务中,拼接操作都在单个方法内完成,无需线程安全,优先选 StringBuilder。
其他方式:String.join() 和 MessageFormat(特定场景)
当拼接的是字符串数组或集合,可用 String.join():
String joined = String.join("-", "a", "b", "c"); // "a-b-c"
List
String joinedList = String.join(",", list); // "x,y,z"
格式化需求强(类似 printf)可用 MessageFormat:
String pattern = "User {0} is {1} years old.";
String result = MessageFormat.format(pattern, "Alice", 30); // "User Alice is 30 years old."










