StringBuilder
文章目录
- 介绍
- 一、核心定义
- 二、为什么需要 StringBuilder?
- 三、底层原理(关键)
- 四、常用方法
- 1️⃣ append(最重要)
- 2️⃣ toString
- 3️⃣ insert
- 4️⃣ delete
- 5️⃣ replace
- 6️⃣ reverse
- 五、性能对比(面试重点)
- 六、StringBuilder vs StringBuffer
- 七、典型使用场景
- ✅ 1. 循环拼接字符串
- ✅ 2. SSE / 流式拼接(你刚刚的场景)
- ✅ 3. 构建复杂字符串(SQL / JSON)
- 八、容量优化(进阶)
- 例子
- 一、最基础:字符串拼接
- 二、循环拼接(最常见场景)
- 三、拼接数组(很实用)
- 四、构建 JSON 字符串
- 五、SQL 拼接(后端常见)
- 六、字符串反转
- 七、插入 & 删除
- 八、你当前场景(SSE 流式拼接)
- 九、链式写法(推荐)
- 总结(快速记忆)
StringBuilder是 Java 中用于高效构建和拼接字符串的核心类,属于java.lang包。介绍
一、核心定义
StringBuilder是一个可变字符串容器(mutable sequence of characters)
对比:
String👉 不可变(immutable)StringBuilder👉 可变(mutable)
二、为什么需要 StringBuilder?
看这个例子:
Strings="";s+="a";s+="b";s+="c";⚠️ 实际发生的是:
"" → "a" → "ab" → "abc"👉 每一步都会创建新对象(性能差)
而StringBuilder:
StringBuildersb=newStringBuilder();sb.append("a");sb.append("b");sb.append("c");👉 只是在同一个对象上追加(性能高)
三、底层原理(关键)
StringBuilder内部其实是:
char[]value;- 一个可扩容数组
特点:
- 默认容量:16
- 不够时自动扩容(通常 *2 + 2)
四、常用方法
1️⃣ append(最重要)
sb.append("hello");sb.append(123);sb.append(true);👉 支持各种类型(会自动转字符串)
2️⃣ toString
Stringresult=sb.toString();👉 转成普通字符串(最终输出)
3️⃣ insert
sb.insert(0,"Hi ");👉 插入内容
4️⃣ delete
sb.delete(0,2);👉 删除指定范围
5️⃣ replace
sb.replace(0,2,"Hello");6️⃣ reverse
sb.reverse();五、性能对比(面试重点)
| 操作 | String | StringBuilder |
|---|---|---|
| 拼接 | ❌ 慢(频繁创建对象) | ✅ 快 |
| 修改 | ❌ 不支持 | ✅ 支持 |
| 内存 | ❌ 浪费 | ✅ 高效 |
六、StringBuilder vs StringBuffer
| 类 | 线程安全 | 性能 |
|---|---|---|
| StringBuilder | ❌ 非线程安全 | ✅ 更快 |
| StringBuffer | ✅ 线程安全(synchronized) | ❌ 较慢 |
👉 结论:
- 单线程 👉 用
StringBuilder - 多线程 👉 用
StringBuffer(或自己加锁)
七、典型使用场景
✅ 1. 循环拼接字符串
StringBuildersb=newStringBuilder();for(inti=0;i<1000;i++){sb.append(i);}✅ 2. SSE / 流式拼接(你刚刚的场景)
fullResponse.append(chunk);👉 一边接收,一边拼完整结果
✅ 3. 构建复杂字符串(SQL / JSON)
八、容量优化(进阶)
可以预设容量避免扩容:
StringBuildersb=newStringBuilder(1024);👉 高性能场景建议这样做
例子
下面给你几个从简单到实用的StringBuilder示例,直接贴代码 + 说明,方便你快速上手。
一、最基础:字符串拼接
StringBuildersb=newStringBuilder();sb.append("Hello");sb.append(" ");sb.append("World");System.out.println(sb.toString());👉 输出:
Hello World✔️ 用于替代"Hello" + " " + "World"
二、循环拼接(最常见场景)
StringBuildersb=newStringBuilder();for(inti=1;i<=5;i++){sb.append(i).append(",");}System.out.println(sb.toString());👉 输出:
1,2,3,4,5,👉 优化去掉最后一个逗号:
sb.deleteCharAt(sb.length()-1);三、拼接数组(很实用)
String[]arr={"苹果","香蕉","橙子"};StringBuildersb=newStringBuilder();for(Strings:arr){sb.append(s).append(" | ");}sb.delete(sb.length()-3,sb.length());System.out.println(sb);👉 输出:
苹果 | 香蕉 | 橙子四、构建 JSON 字符串
StringBuildersb=newStringBuilder();sb.append("{");sb.append("\"name\":\"张三\",");sb.append("\"age\":18");sb.append("}");System.out.println(sb.toString());👉 输出:
{"name":"张三","age":18}五、SQL 拼接(后端常见)
StringBuildersql=newStringBuilder();sql.append("SELECT * FROM user WHERE 1=1 ");if(true){sql.append("AND name = '张三' ");}if(true){sql.append("AND age > 18 ");}System.out.println(sql);👉 输出:
SELECT * FROM user WHERE 1=1 AND name = '张三' AND age > 18六、字符串反转
StringBuildersb=newStringBuilder("hello");sb.reverse();System.out.println(sb);👉 输出:
olleh七、插入 & 删除
StringBuildersb=newStringBuilder("HelloWorld");sb.insert(5," ");sb.delete(0,1);System.out.println(sb);👉 输出:
ello World八、你当前场景(SSE 流式拼接)
StringBuilderfullResponse=newStringBuilder();String[]chunks={"你","好",",","世","界"};for(Stringchunk:chunks){// 模拟流式返回System.out.println("发送:"+chunk);// 拼完整结果fullResponse.append(chunk);}System.out.println("完整结果:"+fullResponse);👉 输出:
完整结果:你好,世界九、链式写法(推荐)
Stringresult=newStringBuilder().append("Java ").append("很 ").append("好用").toString();System.out.println(result);总结(快速记忆)
你可以把StringBuilder理解为:
👉 一个“字符串拼接工具箱”,专门用来高效处理字符串
最常用的就 3 个:
append()// 拼接toString()// 转字符串delete()// 删除