2.22.StringBuffer类的常见用法、

一.基本定位:

  • 线程安全的可变字符序列,用于频繁拼接、修改字符串。
  • String 区别:String 不可变,每次修改都会新建对象;StringBuffer 自身可变,效率更高。
  • StringBuilder 区别:StringBuffer 方法带 synchronized线程安全但性能略低StringBuilder 非线程安全但更快。

二. 核心特点:

  1. 可变字符数组 :底层用 char[] 存储,会自动扩容。
  2. 线程安全:多线程环境下操作字符串推荐使用。
  3. 方法与 StringBuilder 基本一致,只是加了同步锁。

三. 常用构造方法

java 复制代码
StringBuffer sb = new StringBuffer();          // 默认初始容量 16
StringBuffer sb = new StringBuffer(int capacity); // 指定容量
StringBuffer sb = new StringBuffer(String str);  // 用字符串初始化

四. 常用方法

1.拼接:

  • append(任意类型):追加内容,最常用
  • insert(int offset, 内容):指定位置插入

2.修改 / 删除:

  • setCharAt(int index, char ch):修改指定位置字符
  • delete(int start, int end):删除 [start, end)
  • deleteCharAt(int index):删除指定下标字符
  • replace(int start, int end, String str):替换区间 [start, end)字符串

3.查询 / 获取:

  • charAt(int index):获取字符
  • indexOf(String str) / lastIndexOf(String str):查找子串位置
  • length():实际长度
  • capacity():当前总容量
  • substring(int start) / substring(int start, int end):截取,返回 String

4.其他:

  • reverse():反转字符串
  • toString():转为 String 对象
  • trimToSize():将容量压缩至实际长度

五. 适用场景:

  • 多线程环境下大量字符串拼接、修改。
  • 单线程优先用 StringBuilder,性能更好。

六. 简单示例:

例一:

java 复制代码
package com.itheima.a11practice;

public class Test {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("0123456789");
        sb.replace(0,5,"aaa");
        System.out.println(sb);
        /*运行结果为aaa56789,把0到4索引上的子串替换为aaa*/
    }
}

例二:

java 复制代码
package com.itheima.a11practice;

public class Test2 {
    public static void main(String[] args) {
        //1.String类的substring方法
        String str="abcdef";
        String result1 = str.substring(0, 2);
        System.out.println(result1); //运行结果为ab

        //2.StringBuffer类的substring方法
        StringBuffer sb=new StringBuffer("abcdef");
        String result2 = sb.substring(0, 2);
        System.out.println(result2); //运行结果为ab

        //3.StringBuilder类的substring方法
        StringBuilder stringBuilder=new StringBuilder("abcdef");
        String result3 = stringBuilder.substring(0, 2);
        System.out.println(result3); //运行结果为ab

        /*
        * String类、StringBuffer类、StringBuilder类的substring方法
        * 的范围是包左不包右
        * */
    }
}

七.StringBuffer所有方法:


八.String、StringBuffer、StringBuilder 对比:

(备注:这是 Java 字符串面试高频题 + 开发必懂核心知识点)

1、三者核心区别(一句话版):

  1. String :不可变字符串,线程安全,效率最低
  2. StringBuffer :可变字符串,线程安全,效率中等
  3. StringBuilder :可变字符串,非线程安全,效率最高

2、完整对比表:

特性 String StringBuffer StringBuilder
可变性 不可变 可变 可变
线程安全 安全 安全(加锁) 不安全
性能 最差 中等 最快
底层 char \[\] 不可修改 char \[\] 可扩容 char \[\] 可扩容
修改行为 每次修改 = 新建对象 修改自身 修改自身
使用场景 少量字符串操作 多线程频繁修改 单线程频繁修改
JDK 版本 1.0 1.0 1.5

3、最关键的 3 个结论:

  1. String 不可变 ,所以拼接字符串会产生大量垃圾对象,千万不要在循环里用 + 拼接字符串
  2. 单线程大量拼接字符串 → 必须用 StringBuilder(速度最快)。
  3. 多线程大量拼接字符串 → 必须用 StringBuffer(线程安全)。

4、一句话记忆口诀:

少量操作用 String,单线程快用 StringBuilder,多线程安全用 StringBuffer

5、开发中怎么选?

  1. 字符串不怎么改 → 用 String
  2. 字符串频繁增删改
    • 单线程 → StringBuilder(优先推荐)
    • 多线程 → StringBuffer

6.总结:

  • String:不可变、安全、慢
  • StringBuffer:可变、安全、中速
  • StringBuilder :可变、不安全、最快

相关推荐
青石路10 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还13 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev15 小时前
GreenDAO → Room
android·java·kotlin
亦暖筑序20 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏21 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev1 天前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还2 天前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩2 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia2 天前
Mybatis的日志输入
java
亦暖筑序2 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式