美文网首页
浅谈String、StringBuffer和StringBuil

浅谈String、StringBuffer和StringBuil

作者: f155b8f6e0ac | 来源:发表于2019-12-09 16:38 被阅读0次

    浅谈String、StringBuffer和StringBuild的区别

    一、可变与否

    • String是不可变的,是被final修饰的.他的长度是不变的,当使用concat()方法的时候,返回的也是有一个新创建的对象。
    • StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的对象。StringBuilder和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

    总结: String、StringBuilder和StringBuffer的底层数据结构都是char[]数组,不同的是String将该char数组设置成了不可变的(final),通过这个关键字实现了不可变对象。

    二、执行效率

    • 三者在执行速度方面的比较:StringBuilder > StringBuffer > String

    由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

    三、建议使用场景

    • 操作少量的数据且不会改变,String
    • 单线程操作大量的数据,StringBuilder
    • 多线程操作大量的数据 StringBuffer

    三、相关知识总结

    1. java支持通过构造方法或者字面常量构建字符串
    2. 字符串对象存放的位置可能放在堆内存,也可能放在字符串常量池。使用构造方法构建的字符串对象一定在堆内存,如果堆该字符串对象调用String.intern()方法,则可以将该字符串移入字符串常量池。
    3. 字符串上支持很多操作API,例如字符串连接、截取字符串、trim、替换字符等等,这些操作看似是写操作,实际上都会返回一个新的字符串
    4. 字符串的连接操作有几种方式:
      • “+”运算符重载,底层是依靠StringBuilder实现的;
      • String.contact()方法,底层是依赖Array.copy实现的;
      • StringBuilder,通过预先分配一个字符缓冲区来进行字符串的连接,适合大批量字符串连接的情况

    相关文章

      网友评论

          本文标题:浅谈String、StringBuffer和StringBuil

          本文链接:https://www.haomeiwen.com/subject/frfigctx.html