一.基本定位:
- 线程安全的可变字符序列,用于频繁拼接、修改字符串。
- 与
String区别:String不可变,每次修改都会新建对象;StringBuffer自身可变,效率更高。 - 与
StringBuilder区别:StringBuffer方法带synchronized,线程安全但性能略低 ;StringBuilder非线程安全但更快。
二. 核心特点:
- 可变字符数组 :底层用
char[]存储,会自动扩容。 - 线程安全:多线程环境下操作字符串推荐使用。
- 方法与 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、三者核心区别(一句话版):
- String :不可变字符串,线程安全,效率最低
- StringBuffer :可变字符串,线程安全,效率中等
- StringBuilder :可变字符串,非线程安全,效率最高
2、完整对比表:
| 特性 | String | StringBuffer | StringBuilder |
|---|---|---|---|
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全 | 安全(加锁) | 不安全 |
| 性能 | 最差 | 中等 | 最快 |
| 底层 | char [] 不可修改 | char [] 可扩容 | char [] 可扩容 |
| 修改行为 | 每次修改 = 新建对象 | 修改自身 | 修改自身 |
| 使用场景 | 少量字符串操作 | 多线程频繁修改 | 单线程频繁修改 |
| JDK 版本 | 1.0 | 1.0 | 1.5 |
3、最关键的 3 个结论:
- String 不可变 ,所以拼接字符串会产生大量垃圾对象,千万不要在循环里用 + 拼接字符串。
- 单线程大量拼接字符串 → 必须用 StringBuilder(速度最快)。
- 多线程大量拼接字符串 → 必须用 StringBuffer(线程安全)。
4、一句话记忆口诀:
少量操作用 String,单线程快用 StringBuilder,多线程安全用 StringBuffer
5、开发中怎么选?
- 字符串不怎么改 → 用
String - 字符串频繁增删改
- 单线程 →
StringBuilder(优先推荐) - 多线程 →
StringBuffer
- 单线程 →
6.总结:
- String:不可变、安全、慢
- StringBuffer:可变、安全、中速
- StringBuilder :可变、不安全、最快