Java中字符串的拼接

一、为什么需要注意字符串拼接

String类的内容是不可变的,这意味着每当我们拼接两个字符串时,实际上是创建了一个新的字符串对象,原来的字符串并不会改变,因此,如果拼接操作不当,可能会产生大量临时对象,导致内存的浪费和性能的低下。

二、常见的字符串拼接方式是

1、使用“+”运算符

这是最直观的方法:
常量拼接:

String str="Hello"+" "+"world";

变量拼接:

String a="Hello";
String b="World";
String c=a+" "+b;

编译器会将上面的代码转换为使用StringBuilder的方式,等价于
String c=new StringBuilder().append(a).append(" ").append(b).toString();

在单个语句中编译器会自动优化,但如果在循环中,效率就会很低。

2、使用concat()方法

String res=s1.concat(s2).concat(s3);
concat() 内部会创建一个新的字符数组,复制原字符串和参数字符串的内容,然后返回新字符串的内容,但每次调用依旧创建新对象,只适合少量字符串连接。

3、使用StringBuilder或StringBuffer

StringBuilder和StringBuffer均是可变的字符序列,专门用于构建字符串。

StringBuilder sb=new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String res=sb.toString();

StringBuilder线程不安全,但效率最高,适合单线程;
StringBuffer线程安全,但性能稍差,适合多线程;
循环拼接字符,应选StringBuilder。

StringBulider sb=new StringBuilder();
for(int i=0;i<100;i++){
sb.append(i);
}
String res=sb.toString();

4、使用 String.join()
对于一个数组或集合,想用分隔符连接:

String[]parts={"A","B","C"};
String result=String.join("-",parts);

内部也是通过 StringBuilder 实现的,简洁高效。

5、使用 String.format()
类似于 C 语言的 printf,可以格式化字符串:

String nam ="张三";
int age=25;
String result=String.format("姓名%s,年龄:%d", name, age);

format() 内部也使用了 StringBuilder,但增加了格式解析的开销,适合需要固定模板的场景,不推荐在性能敏感循环中使用。

6、使用 Stream 收集器

List list = Arrays.asList("A", "B", "C");
String result = list.stream().collect(Collectors.joining(","));

Collectors.joining()底层仍然使用 StringBuilder,非常适合集合元素拼接。

三、总结

1、单次拼接或固定少量拼接,用 + 最简洁。

2、循环内动态拼接,必须用 StringBuilder。

3、集合拼接,优先用 String.join() 或 Stream。

posted @ 2026-06-07 11:32  Znkunft  阅读(5)  评论(0)    收藏  举报