You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StringBuilder append()与String "+"运算符拼接的差异及效率对比

字符串拼接的实例创建与效率对比

先看两段代码:

代码片段1:显式使用StringBuilder

StringBuilder sb = new StringBuilder("");
for (int i = 0; i < 5; i++) {
    sb.append("hello ");
}
System.out.println(sb.toString());

代码片段2:使用"+="拼接字符串

String ss = "";
for (int i = 0; i < 5; i++) {
    ss += "hello ";
}
System.out.println(ss);

问题解答

1. 循环中执行ss += "hello "会创建新的String实例吗?

会的。虽然Java编译器对字符串+操作会优化为使用StringBuilder的append方法,但循环内的每次+=操作都是独立的优化单元:

  • 每次迭代时,编译器会新建一个StringBuilder实例,将当前ss的内容和"hello "依次append进去
  • 然后调用toString()生成一个全新的String对象,再把这个对象赋值给ss变量
  • 循环5次的话,会额外创建5个StringBuilder实例和5个新的String对象(初始的空字符串不算在内)

编译器无法将整个循环的拼接逻辑合并到一个StringBuilder实例中,因为编译期无法确定循环的执行次数。

2. 哪段代码效率更高?

第一段显式使用StringBuilder的代码效率更高,原因如下:

  • 第一段全程只创建1个StringBuilder实例,循环中仅执行append操作(无额外对象创建),最后仅生成1个String对象
  • 第二段每次循环都要创建新的StringBuilder和String对象,频繁的对象创建会带来额外的内存分配和垃圾回收开销,循环次数越多,这种性能差距越明显

内容的提问来源于stack exchange,提问作者MVKXXX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:50:28