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

相关推荐
于先生吖2 小时前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
yhole2 小时前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
明月(Alioo)2 小时前
Python 并发编程详解 - Java 开发者视角
java·开发语言·python
JAVA+C语言2 小时前
C++ STL map 系列全方位解析
开发语言·c++
福赖2 小时前
《C#反射机制》
开发语言·c#
0xDevNull2 小时前
基于Java的小程序地理围栏实现原理
java·小程序
arvin_xiaoting2 小时前
OpenClaw学习总结_II_频道系统_5:Signal集成详解
java·前端·学习·signal·ai agent·openclaw·signal-cli
凌波粒2 小时前
LeetCode--19.删除链表的倒数第 N 个结点(链表)
java·算法·leetcode·链表