写点什么

String,StringBuilder,StringBuffer 区别,竟有这么多不同

作者:知识浅谈
  • 2022 年 9 月 19 日
    吉林
  • 本文字数:906 字

    阅读完需:约 3 分钟

String,StringBuilder,StringBuffer区别,竟有这么多不同

🍁 作者:知识浅谈,CSDN 博客专家,阿里云签约博主,InfoQ 签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈


从源代码看 String,StringBuilder,StringBuffer 区别🤞这次以 JDK1.8 的版本,Jdk1.8 以上底层数组采用了 byte🤞


正菜来了⛳⛳⛳

🎈区别一:安全相关

  • String 和 StringBuilder 是线程不安全的;

  • StringBuffer 是线程安全的。


为何?因为 StringBuffer 在 append,delete,等等方法上加了 synchronized 锁,所以就是线程安全的。这里拿出底层实现的几个方法:


  @Override    public synchronized int length() {        return count;    }    @Override    public synchronized int capacity() {        return value.length;    }    @Override    public synchronized void ensureCapacity(int minimumCapacity) {        super.ensureCapacity(minimumCapacity);    }    @Override    public synchronized void trimToSize() {        super.trimToSize();    }
复制代码

🎈区别二:动态数组相关

  • String 不可动态扩容;

  • StringBuilder 和 StringBuffer 可以动态扩容。


🏹String 底层使用的是 final 修饰的常量数组所以其大小是不可变的。


private final char value[];
复制代码


🏹StringBuilder 和 StringBuffer 是可变的原因:因为 StringBuilder 和 StringBuffer 都是继承了抽象类 AbstractStringBuilderAbstractStringBuilder 内部使用的是字符数组非常量,也就是可变的。


char[] value;
复制代码


初始化的时候默认的长度为 16。


StringBuilder 和 StringBuffer 还有一个区别:StringBuffer 比 StringBuilder 多了一个 toStringCache 字段。toStringCache:在字符串 tostring 之后,保存执行 tostring() 方法之后的结果,当字符串改变的时候 toStringCache 就失效。

🎈拓展:单线程下的 StringBuilder

相比于 StringBuilder,StringBuffer 在单线程的情况下也是加锁的,所以锁的添加与释放都需要耗费一定的时间。由于 Synchronized 锁的优化,其锁的状态有偏向锁,轻量级锁,重量级锁,单线程状态下一直是一个线程持有该锁,所以一直是偏向锁,这样的话锁的添加与释放就减少了一定的时间耗费。

🍚总结

以上就是关于 String,StringBuilder,StringBuffer 区别,希望有所帮助。

发布于: 刚刚阅读数: 4
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,InfoQ签约作者,CSDN博客专家/签约讲师,华为云云享专家,阿里云签约博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
String,StringBuilder,StringBuffer区别,竟有这么多不同_string_知识浅谈_InfoQ写作社区