温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

StringBuffer和String区别

发布时间:2026-09-15 12:55:30 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 中,StringStringBuffer 都用于处理字符串,但它们在可变性、线程安全、性能和使用场景上有明显区别。


一、核心区别对比

对比点 String StringBuffer
是否可变 ❌ 不可变(Immutable) ✅ 可变(Mutable)
修改方式 每次修改都会创建新对象 在原对象上修改
线程安全 ✅ 安全(因不可变) ✅ 线程安全(方法加 synchronized)
性能 频繁修改时性能差 频繁修改时性能好
适用场景 字符串不常变 多线程下频繁修改字符串

二、详细说明

1️⃣ String(不可变)

String s = "abc";
s = s + "def";
  • 实际过程:
    • 创建新 String 对象 "abcdef"
    • "abc" 对象不变
  • 频繁拼接会产生大量垃圾对象

✅ 适合:

  • 常量字符串
  • 配置信息
  • 不常修改的内容

2️⃣ StringBuffer(可变 + 线程安全)

StringBuffer sb = new StringBuffer("abc");
sb.append("def");
  • 直接修改原对象
  • 方法使用 synchronized,保证多线程安全

✅ 适合:

  • 多线程环境下频繁修改字符串
  • 例如:日志拼接、网络通信

三、和 StringBuilder 的区别(补充)

很多人会一起问这三个

可变性 线程安全 性能
String 不可变 安全 低(频繁修改)
StringBuffer 可变 ✅ 安全
StringBuilder 可变 ❌ 不安全

单线程优先用 StringBuilder


四、使用建议总结

  • ✅ 字符串基本不变 → String
  • ✅ 多线程频繁修改 → StringBuffer
  • ✅ 单线程频繁修改 → StringBuilder

如果你愿意,我也可以给你画内存变化图或结合面试题讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI