阿里面试官必问:String、StringBuilder、StringBuffer 三者区别?90%程序员答不到底层本质!
前言
Java 基础必问高频原题:String、StringBuilder、StringBuffer 的区别。
很多人只会背一句:
String 不可变、后两者可变;Buffer线程安全、Builder不安全。
但面试官继续深挖:
为什么 String 不可变?底层存储区别?拼接性能差距到底在哪?业务场景怎么精准选型?
瞬间翻车、答不全、拿不到满分。
本篇一次性讲透底层原理、可变性、线程安全、性能、源码差异、真实业务选型,看完面试直接满分!
一、核心一句话总结(面试开篇必杀)
- String:不可变字符串、线程安全、拼接性能差
- StringBuilder:可变字符串、线程不安全、性能最高(单线程首选)
- StringBuffer:可变字符串、线程安全、性能低(多线程旧方案)
二、底层本质区别(重中之重)
1. String(不可变)
底层:private final char[] / byte[] value
一旦创建,数组内容不可修改。
所有字符串拼接、替换、截取不会修改原对象,只会 新建一个新 String 对象。
频繁拼接会产生大量废弃对象、浪费内存、GC压力大。
2. StringBuilder(可变)
底层:非 final 字节数组 + 自动扩容
对象创建后,直接在原数组上修改、追加、删除,不产生新对象。
性能极高。
3. StringBuffer(可变)
底层和 StringBuilder 一模一样,
只是所有方法加了 synchronized 锁,保证多线程安全。
三、三大维度完整对比(面试默写表)
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全 | 不安全 | 安全(synchronized) |
| 性能 | 极低(频繁创建新对象) | 最高 | 较低(锁开销) |
| 底层实现 | final 数组 | 可变动态数组 | 可变动态数组 |
| 适用场景 | 少量字符串、常量、固定文本 | 单线程大量拼接 | 多线程拼接(基本淘汰) |
四、为什么 String 不可变?(面试加分超级重点)
重点:String 的所有修改都是 新建对象,不是原地修改。
五、为什么 StringBuilder 性能远超 String?
String 拼接原理
String s = "a"+"b"+"c";
循环拼接会:
产生大量中间 String 对象 → 堆内存暴涨 → 频繁GC → 性能极差
StringBuilder 原理
内部自动扩容,全程只有一个对象,直接原地追加数据,无多余开销。
循环拼接必须用 StringBuilder!
六、StringBuffer 为什么现在基本淘汰?
七、业务场景选型标准(面试官最爱问)
1. 能用 String 的场景
- 字符串固定不变
- 少量定义、常量、配置、key、文本展示
2. 必须用 StringBuilder 的场景(99%业务)
- for 循环拼接字符串
- 动态组装 SQL、JSON、日志、报文
- 单线程所有字符串拼接场景
3. StringBuffer 几乎不用
只有极其老旧的多线程代码、全局静态字符串拼接才会见到,新项目禁止使用。
八、高频面试误区纠正
❌ 误区1:String 拼接完全不能用
正确:少量拼接可以用,编译器会自动优化为 StringBuilder;
循环拼接绝对不能用 String,无法优化,性能爆炸。
❌ 误区2:StringBuilder 多线程能用
正确:绝对不安全,多线程并发拼接会覆盖数据、出现脏数据、长度错乱。
❌ 误区3:StringBuffer 比 StringBuilder 好
正确:过时技术,现代开发优先手动控制锁,不用自带锁。
九、面试满分标准回答(直接背诵)
String、StringBuilder、StringBuffer 核心区别在于可变性和线程安全。
String 底层是 final 不可变数组,每次修改都会生成新对象,线程安全但拼接性能差,适合固定字符串。
StringBuilder 和 StringBuffer 底层是可变动态数组,修改不产生新对象,性能高。
其中 StringBuilder 无锁、线程不安全、性能最高,适合所有单线程拼接场景;
StringBuffer 方法带有 synchronized 锁、线程安全、性能较低,目前新项目基本淘汰。
业务开发中:固定字符串用 String,循环动态拼接一律用 StringBuilder。
总结
- 少量固定文本 → String
- 单线程大量拼接 → StringBuilder(主力)
- 多线程拼接 → 不用 StringBuffer,手动加锁 + StringBuilder
吃透这道题,Java 基础面试直接稳了!
网硕互联帮助中心



评论前必须登录!
注册