方法定义

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

使用技巧

  1. 链式调用:利用返回值连续追加
    sb.append("A").append("B").append("C");
    
  2. 预设容量:避免频繁扩容
    StringBuffer sb = new StringBuffer(100); // 初始容量100
    

常见错误

  1. 误用 + 拼接循环字符串(引发性能问题):
    // 错误示例:每次循环创建新对象
    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); // 高效拼接
    }
    
  2. 未初始化直接使用
    StringBuffer sb; // 未初始化
    sb.append("data"); // NullPointerException
    

注意事项

  1. 线程安全代价
    • 多线程环境用 StringBuffer
    • 单线程环境用 StringBuilder(无同步开销,性能提升 10-20%)
  2. 避免无意义扩容
    • 默认容量 16 字符,超出时自动翻倍(2n+2
    • 预估大小初始化:new StringBuffer(初始容量)

性能优化

  1. 优先选 StringBuilder:单线程下性能更优
  2. 初始化容量:减少扩容次数(扩容涉及数组复制)
    // 预估最终长度 1000 字符
    StringBuffer sb = new StringBuffer(1000);
    
  3. 复用对象(复杂场景):
    sb.setLength(0); // 清空内容复用缓冲区(避免重新分配内存)
    

最佳实践

  1. 循环拼接必用:代替 + 操作符
  2. 大文本处理:如 XML/JSON 生成、日志构建
  3. API 设计:方法返回可变字符串时使用
    public StringBuffer getUserInfo() {
        StringBuffer info = new StringBuffer();
        info.append("Name: ").append(name);
        return info; // 调用方可继续追加
    }
    

总结

要点 说明
核心功能 高效追加各类数据到字符串缓冲区末尾
线程安全 StringBuffer(多线程) vs StringBuilder(单线程)
性能关键 初始化容量 + 避免循环中用 + 拼接字符串
典型场景 循环拼接、动态生成大文本(JSON/XML/SQL)、日志组装
错误预防 初始化对象 + 多线程环境选对实现类

行动建议

  1. 循环拼接字符串 → 无条件用 append()
  2. 单线程环境 → 替换为 StringBuilder
  3. 已知最终长度 → 初始化时指定容量

通过合理使用 append(),可避免 90% 的字符串拼接性能问题!