StringBuilder的append()总在末尾追加内容并支持链式调用,insert()按指定索引插入使后续字符后移;二者均修改原对象、支持多类型参数,但需注意索引范围、null处理及线程安全(应选StringBuffer)。

Java 中用 StringBuilder 的 append() 和 insert() 方法修改字符串内容,核心是理解它们的定位逻辑:前者总在末尾追加,后者按指定索引插入。
append():在末尾追加内容
append() 会把新内容加到当前字符串的最右边,返回自身(支持链式调用),不改变原有字符位置。
- 支持多种类型参数(
String、int、char、boolean等),自动转成字符串拼接 - 多次调用等价于连续拼接,比用
+拼接 String 效率高得多
示例:
StringBuilder sb = new StringBuilder("Hello");sb.append(" World").append("!").append(2024);
// 结果: "Hello World!2024"
insert():在指定位置插入内容
insert(int offset, ...) 把内容插到索引 offset 处(从 0 开始),原位置及之后的字符整体后移。
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
offset必须满足0 ≤ offset ≤ length(),等于长度时效果等同于append() - 同样支持多类型参数,插入内容会被转换为字符串
- 注意索引越界会抛
StringIndexOutOfBoundsException
示例:
StringBuilder sb = new StringBuilder("abc");sb.insert(1, "XYZ"); // 在索引1处插入 → "aXYZbc"
sb.insert(sb.length(), "END"); // 插入末尾 → "aXYZbcEND"
组合使用:边插边追,灵活构建
实际开发中常混合使用两者。比如格式化日志、拼接 SQL、生成 HTML 标签等场景,先用 insert() 填占位符,再用 append() 补后续内容。
- 插入操作会改变字符串长度,后续
insert()的索引需按新长度重新计算 - 若需反复在开头插入,可先用
reverse()配合append(),再反转回来(但通常直接用insert(0, ...)更直观)
小技巧:用 insert(0, ...) 实现“前缀添加”,比反复 append() 后再整体反转更清晰。
注意事项和常见误区
这两个方法都修改原对象,不会创建新 StringBuilder;同时要注意线程安全——StringBuilder 不是线程安全的,多线程环境下应改用 StringBuffer。
- 误把
insert()的索引当成“第几个字符”(如想插在第二个字符前,应传1,不是2) - 忽略空字符串或 null 参数:传
null会插入字符串 "null",不是跳过 - 链式调用时,所有操作共享同一个对象,顺序很重要

















