stringbuilder的append()总在末尾追加内容,insert()在指定索引插入;前者支持链式调用且效率高,后者可前置添加或局部修正;两者均支持多类型参数,混合使用可先搭骨架再填充;注意预估容量、复用实例及单线程适用性。

Java 中用 StringBuilder 的 append() 和 insert() 方法构建文本,核心是理解两者定位逻辑:前者总在末尾追加,后者在指定索引位置插入。
append():从末尾持续拼接
append() 是最常用的方法,支持多种类型参数(字符串、数字、布尔、字符数组等),每次调用都在当前内容末尾追加新内容,返回自身便于链式调用。
常见写法示例:
-
new StringBuilder().append("Hello").append(" ").append(123).append("!")→ 得到"Hello 123!" -
append(null)会插入字符串"null",不是空指针异常 - 多次
append()比用+拼接字符串效率高,尤其循环中
insert():在任意位置插入内容
insert(int offset, ...) 把新内容插入到指定索引(offset)位置,原内容自动后移。索引从 0 开始,最大允许值为当前长度(即插在末尾等价于 append())。
注意点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 索引超出范围(
或 <code>> length())会抛StringIndexOutOfBoundsException -
insert(0, "X")相当于“前置添加”,比如把"world"变成"Xworld" - 可插入任意类型,和
append()支持的参数类型一致
混合使用:先搭骨架再局部填充
实际开发中常结合使用:用 append() 快速搭建主体结构,再用 insert() 在关键位置补内容或修正格式。
例如生成带编号的列表项:
- 先
sb.append("Item: ").append(name) - 再
sb.insert(0, "[").insert(sb.length(), "]")→ 变成"[Item: xxx]" - 或者在冒号后插入空格:
int colonPos = sb.indexOf(":"); sb.insert(colonPos + 1, " ")
性能与线程安全提醒
StringBuilder 是非线程安全但速度快的可变字符串类,适合单线程场景。如果多线程共享修改,应改用 StringBuffer(方法签名相同,只是线程安全开销更大)。
小技巧:
- 初始化时预估容量(如
new StringBuilder(128)),减少内部数组扩容次数 - 不需要再修改时,用
toString()转为不可变字符串保存或传递 - 避免在循环里反复创建
StringBuilder实例,复用更高效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










