在 Java 中,String 和 StringBuffer 都用于处理字符串,但它们在可变性、线程安全、性能和使用场景上有明显区别。
| 对比点 | String | StringBuffer |
|---|---|---|
| 是否可变 | ❌ 不可变(Immutable) | ✅ 可变(Mutable) |
| 修改方式 | 每次修改都会创建新对象 | 在原对象上修改 |
| 线程安全 | ✅ 安全(因不可变) | ✅ 线程安全(方法加 synchronized) |
| 性能 | 频繁修改时性能差 | 频繁修改时性能好 |
| 适用场景 | 字符串不常变 | 多线程下频繁修改字符串 |
String s = "abc";
s = s + "def";
"abcdef""abc" 对象不变✅ 适合:
StringBuffer sb = new StringBuffer("abc");
sb.append("def");
synchronized,保证多线程安全✅ 适合:
很多人会一起问这三个
| 类 | 可变性 | 线程安全 | 性能 |
|---|---|---|---|
| String | 不可变 | 安全 | 低(频繁修改) |
| StringBuffer | 可变 | ✅ 安全 | 中 |
| StringBuilder | 可变 | ❌ 不安全 | 高 |
✅ 单线程优先用 StringBuilder
如果你愿意,我也可以给你画内存变化图或结合面试题讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。