Java 字符串拼接
方法一:使用 + 号拼接【最常用、最简单】
✅ 语法
直接使用
+ 运算符连接任意数据类型和字符串,是 Java 中最基础、最易上手的拼接方式。✅ 核心特点
- 语法极度简洁,开发效率最高,日常开发单行少量拼接首选;
- 支持「字符串 + 字符串」「字符串 + 任意基本类型 / 引用类型」,其他类型会自动调用
toString()转为字符串; - JDK 5 及以上做了编译器优化:底层会自动把连续的
+拼接,编译成StringBuilder.append(),所以单行少量拼接时,效率和 StringBuilder 几乎无差别。
✅ 完整实例
public class StringConcatDemo {
public static void main(String[] args) {
// 1. 纯字符串拼接
String str1 = "Java";
String str2 = "编程";
String res1 = str1 + str2;
System.out.println("纯字符串拼接:" + res1); // 输出:Java编程
// 2. 字符串 + 基本数据类型(自动转字符串)
String str3 = "年龄:";
int age = 20;
String res2 = str3 + age;
System.out.println("字符串+数字:" + res2); // 输出:年龄:20
// 3. 多段连续拼接
String res3 = "Hello" + " " + "Java" + " " + 2026;
System.out.println("多段拼接:" + res3); // 输出:Hello Java 2026
}
}
方法二:使用 String.concat(String str) 方法【字符串专属拼接】
✅ 语法
原字符串.concat(要拼接的字符串),是 java.lang.String 类原生提供的字符串专属拼接方法。✅ 核心特点
- 只能拼接字符串类型,参数必须是
String,如果要拼接其他类型,需要手动转字符串(如String.valueOf(age)); - 拼接规则:如果拼接的字符串是
null,会拼接字符串"null";如果是空字符串"",则返回原字符串; - 本质还是基于 String 不可变实现,拼接后返回新的字符串对象。
✅ 完整实例
public class StringConcatDemo {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Java";
// 基础拼接
String res1 = str1.concat(str2);
System.out.println("基础concat:" + res1); // 输出:HelloJava
// 连续拼接(链式调用)
String res2 = str1.concat(" ").concat(str2).concat("!");
System.out.println("链式concat:" + res2); // 输出:Hello Java!
// 拼接null值
String nullStr = null;
String res3 = str1.concat(nullStr);
System.out.println("拼接null:" + res3); // 输出:Hellonull
// 拼接空字符串
String res4 = str1.concat("");
System.out.println("拼接空字符串:" + res4); // 输出:Hello(原字符串)
}
}
方法三:使用 StringBuilder / StringBuffer 的 append() 方法【高效拼接、开发首选】
✅ 核心说明
这是 Java 中性能最优的字符串拼接方式,也是企业开发推荐的核心方案,专门解决「String 不可变导致的拼接性能问题」。
StringBuilder:非线程安全,效率极高,99% 的业务场景(单线程)首选;StringBuffer:线程安全,效率略低,仅在「多线程并发拼接字符串」时使用;- 两者都是可变字符序列,拼接时不会创建新对象,而是直接在原有对象的缓冲区追加字符,最终调用
toString()转为 String 即可。
✅ 语法
// StringBuilder(推荐)
StringBuilder sb = new StringBuilder();
sb.append(内容1).append(内容2).append(内容3);
String result = sb.toString();
// StringBuffer(多线程用)
StringBuffer sbf = new StringBuffer();
sbf.append(内容1).append(内容2);
String result = sbf.toString();
✅ 核心特点
- 支持拼接任意数据类型(字符串、数字、布尔值、对象等),自动转字符串;
- 支持链式调用,
append()方法返回自身对象,可连续追加; - 循环拼接场景的绝对最优解:如果需要在
for/while循环中拼接字符串,严禁使用 + 号,必须用 StringBuilder,否则会创建海量无用对象,造成内存浪费和性能暴跌!
✅ 完整实例(含循环拼接重点场景)
public class StringConcatDemo {
public static void main(String[] args) {
// ========== 场景1:普通拼接 ==========
StringBuilder sb = new StringBuilder();
sb.append("Java")
.append("编程助手")
.append(2026)
.append(true);
String res1 = sb.toString();
System.out.println("普通拼接:" + res1); // 输出:Java编程助手2026true
// ========== 场景2:循环拼接(重点!!!) ==========
// 需求:拼接 0-9 的数字,用逗号分隔
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb2.append(i).append(",");
}
// 去掉最后一个多余的逗号
String res2 = sb2.deleteCharAt(sb2.length() - 1).toString();
System.out.println("循环拼接:" + res2); // 输出:0,1,2,3,4,5,6,7,8,9
// ========== 场景3:多线程安全拼接 ==========
StringBuffer sbf = new StringBuffer();
sbf.append("线程安全").append("拼接");
String res3 = sbf.toString();
System.out.println("StringBuffer拼接:" + res3); // 输出:线程安全拼接
}
}
方法四:JDK 8 新增 String.join() 【带分隔符的批量拼接】
✅ 语法
String.join(分隔符, 字符串1, 字符串2, ...) 或 String.join(分隔符, 字符串集合/数组)✅ 核心特点
- JDK 8 及以上版本可用,专门解决「带固定分隔符的批量拼接」场景(如逗号、空格、横线分隔);
- 语法简洁,无需手动处理「最后一个分隔符多余」的问题;
- 支持传入多个字符串、字符串数组、List 集合等,非常适合批量拼接。
✅ 完整实例
import java.util.Arrays;
import java.util.List;
public class StringConcatDemo {
public static void main(String[] args) {
// 场景1:拼接多个独立字符串,指定分隔符
String res1 = String.join("-", "Java", "Python", "Go", "C++");
System.out.println("多字符串拼接:" + res1); // 输出:Java-Python-Go-C++
// 场景2:拼接字符串数组
String[] arr = {"北京", "上海", "广州", "深圳"};
String res2 = String.join(" | ", arr);
System.out.println("数组拼接:" + res2); // 输出:北京 | 上海 | 广州 | 深圳
// 场景3:拼接List集合
List<String> list = Arrays.asList("张三", "李四", "王五");
String res3 = String.join(",", list);
System.out.println("集合拼接:" + res3); // 输出:张三,李四,王五
}
}
方法五:JDK 11 新增 String.repeat(int count) 【重复拼接同个字符串】
✅ 语法
原字符串.repeat(重复次数),专门用于「把同一个字符串重复拼接 N 次」的场景,JDK 11 及以上可用。✅ 核心特点
- 替代传统的「循环 + append」实现重复拼接,语法极致简洁;
- 如果重复次数为 0,返回空字符串;次数为负数会抛出异常。
✅ 完整实例
public class StringConcatDemo {
public static void main(String[] args) {
String str = "Java-";
// 重复拼接3次
String res1 = str.repeat(3);
System.out.println("重复拼接3次:" + res1); // 输出:Java-Java-Java-
// 重复拼接0次(返回空字符串)
String res2 = str.repeat(0);
System.out.println("重复拼接0次:" + res2); // 输出:(空)
// 实际业务场景:拼接分隔线
String line = "-".repeat(20);
System.out.println("分隔线:" + line); // 输出:--------------------
}
}
浙公网安备 33010602011771号