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 :可变、不安全、最快

相关推荐
tachibana25 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky5 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
万亿少女的梦1686 小时前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
咩咩啃树皮14 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
灯澜忆梦14 小时前
GO_并发编程---定时器
开发语言·后端·golang
鱟鲥鳚15 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-15 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-15 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白16 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司17 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求