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

相关推荐
摇滚侠13 小时前
Java 项目教程《黑马商城》服务治理 11 - 14
java·微服务·架构
一只大袋鼠13 小时前
Spring 事务管理三种实现方式
java·数据库·spring·声明式事务
TANGLONG22214 小时前
【C++】STL基础必备:深入解析vector容器的实现(含源码)
c语言·开发语言·数据结构·c++·笔记·算法·stl
郝学胜-神的一滴14 小时前
高并发秒杀系统设计全解:从需求拆解到Redis库存实战
java·数据库·redis·python·程序人生·缓存·php
50万马克的面包14 小时前
C语言第3讲:分支和循环
c语言·开发语言·笔记·算法
ytttr87314 小时前
惯性导航精解算程序(MATLAB实现)
开发语言·matlab
NE_STOP14 小时前
Redis--哨兵机制与CAP定理
java
艺杯羹14 小时前
从零搭建CSDN博客爬虫:Python爬虫+多格式导出完整教程
开发语言·爬虫·python·开源·gui·csdn
书源丶14 小时前
四十二、网络编程(上)——IP、端口与 UDP 编程
java·网络·tcp/ip·udp