方法定义
public StringBuffer append(数据类型 value)
- 参数:支持多种数据类型(
String
,int
,char
,boolean
,float
,double
,Object
等) - 返回值:返回当前
StringBuffer
对象(支持链式调用) - 线程安全:所有方法使用
synchronized
修饰(线程安全)
功能说明
将任意数据类型转换为字符串后,追加到缓冲区末尾。适用于频繁修改字符串的场景(如循环拼接)。
示例代码
StringBuffer sb = new StringBuffer("Hello");
// 追加不同类型数据
sb.append(" World") // 字符串
.append(123) // 整数
.append('!') // 字符
.append(true) // 布尔值
.append(3.14); // 浮点数
System.out.println(sb); // 输出: Hello World123!true3.14
使用技巧
- 链式调用:利用返回值连续追加
sb.append("A").append("B").append("C");
- 预设容量:避免频繁扩容
StringBuffer sb = new StringBuffer(100); // 初始容量100
常见错误
- 误用
+
拼接循环字符串(引发性能问题):
正确做法:// 错误示例:每次循环创建新对象 String result = ""; for (int i = 0; i < 1000; i++) { result += i; // 低效! }
StringBuffer sb = new StringBuffer(); for (int i = 0; i < 1000; i++) { sb.append(i); // 高效拼接 }
- 未初始化直接使用:
StringBuffer sb; // 未初始化 sb.append("data"); // NullPointerException
注意事项
- 线程安全代价:
- 多线程环境用
StringBuffer
- 单线程环境用
StringBuilder
(无同步开销,性能提升 10-20%)
- 多线程环境用
- 避免无意义扩容:
- 默认容量 16 字符,超出时自动翻倍(
2n+2
) - 预估大小初始化:
new StringBuffer(初始容量)
- 默认容量 16 字符,超出时自动翻倍(
性能优化
- 优先选
StringBuilder
:单线程下性能更优 - 初始化容量:减少扩容次数(扩容涉及数组复制)
// 预估最终长度 1000 字符 StringBuffer sb = new StringBuffer(1000);
- 复用对象(复杂场景):
sb.setLength(0); // 清空内容复用缓冲区(避免重新分配内存)
最佳实践
- 循环拼接必用:代替
+
操作符 - 大文本处理:如 XML/JSON 生成、日志构建
- API 设计:方法返回可变字符串时使用
public StringBuffer getUserInfo() { StringBuffer info = new StringBuffer(); info.append("Name: ").append(name); return info; // 调用方可继续追加 }
总结
要点 | 说明 |
---|---|
核心功能 | 高效追加各类数据到字符串缓冲区末尾 |
线程安全 | 用 StringBuffer (多线程) vs StringBuilder (单线程) |
性能关键 | 初始化容量 + 避免循环中用 + 拼接字符串 |
典型场景 | 循环拼接、动态生成大文本(JSON/XML/SQL)、日志组装 |
错误预防 | 初始化对象 + 多线程环境选对实现类 |
行动建议:
- 循环拼接字符串 → 无条件用
append()
- 单线程环境 → 替换为
StringBuilder
- 已知最终长度 → 初始化时指定容量
通过合理使用 append()
,可避免 90% 的字符串拼接性能问题!