您的位置:首页 > Web前端

Java面试之String 和 StringBuffer、StringBuilder 的区别是什么?String 为什 么是不可变的?

2020-03-06 14:06 1471 查看

**

  1. 可变性比较

**
String类使用final关键字修饰字符数组保存字符串,对象不可变

StringBuffer、StringBuilder则都继承自 AbstractStringBuilder 其没有使用final关键字修饰数组,对象可变

**

2.线程安全性比较

**
String类中对象不可变,线程安全

StringBuffer类中对方法加了同步锁,所以也是线程安全的

StringBuilder类中并未加同步锁,所以是非线程安全的

**

3.性能比较

**
使用String类时,每次都会生成新的String对象,然后指针指向新的对象。
StringBuffer则每次对StringBuffer对象本身操作,不生成新的对象。
StringBuilder比StringBuffer提升10%到15%的性能,要冒线程不安全的风险

总结

  1. 操作少量的数据 = String
  2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder
  3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer
  • 点赞
  • 收藏
  • 分享
  • 文章举报
vthinkwen 发布了13 篇原创文章 · 获赞 0 · 访问量 63 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐