Java字符串拼接性能关键在于选用StringBuilder而非String,因其可变性避免重复创建对象;循环拼接、构建长文本、多次编辑等场景应优先使用,并预估容量以减少扩容开销,注意null处理、索引边界及线程安全问题。
Java中字符串拼接慢,往往不是代码逻辑问题,而是选错了工具。String不可变,每次“修改”都生成新对象;StringBuilder可变,在同一块内存上操作,这才是真正提升性能的关键。
不是所有字符串操作都需要它。以下场景强烈建议使用:
如果只是拼接两三个固定字符串(如"Hello " + name + "!"),编译器会自动优化为StringBuilder,无需手动替换。
默认构造的StringBuilder初始容量是16,一旦内容超出,内部数组就要扩容——复制旧数组、分配新空间、再拷贝,代价不小。尤其在已知结果长度时,提前指定容量能避免多次扩容。
立即学习“Java免费学习笔记(深入)”;
new StringBuilder(900)
StringBuilder(int capacity)直接设定,比反复append更稳StringBuilder本身不是字符串,它只是“加工车间”。完成所有操作后,必须调用toString()获取最终结果。
sb.append("a").append("b").append("c") 是标准写法,支持链式调用toString()——那会白造String对象,失去意义看似简单的方法,藏着容易踩的坑:
append(null) 会追加字符串"null",不是空指针异常,但可能不符合预期insert(index, str) 中index必须满足 0 ≤ index ≤ length(),越界抛StringIndexOutOfBoundsException
delete(start, end) 的end是**不包含**的,即删除[start, end)区间,这点和substring一致StringBuffer或重构为无共享设计