zoukankan      html  css  js  c++  java
  • String、StringBuffer 和 StringBuilder 的区别

    为什么出现StringBuffer 和 StringBuilder?

    因为 String 类型是不可变的,所以在字符串拼接的时候如果使用 String 的话性能会很低,因此我们就需要使用另一个数据类型 StringBuffer,它提供了 append 和 insert 方法可用于字符串的拼接,它使用 synchronized 来保证线程安全,也因为 StringBuffer使用了 synchronized 来保证线程安全,所以性能不是很高,于是在 JDK 1.5 就有了 StringBuilder,它同样提供了 append 和 insert 的拼接方法,但它没有使用 synchronized 来修饰,因此在性能上要优于 StringBuffer,所以在非并发操作的环境下可使用 StringBuilder 来进行字符串拼接。

    区别

    简答

    1) String 长度大小不可变,StringBuffer 和 StringBuilder 长度可变

    2) StringBuffer 线程安全,StringBuilder 线程不安全,因此StringBuilder性能上要优于 StringBuffer(巧记:游戏中射手拿了红buffer后再打团比较安全

    详答

    1) String:字符串常量,字符串长度不可变。Java中String 是immutable(不可变)的。用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。

    2) StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。

    3) StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。

    使用场景

    如果要操作少量的数据用 String ;

    单线程操作大量数据用StringBuilder ;

    多线程操作大量数据,用StringBuffer。

    常见面试题

    StringBuffer和StringBuilder 哪个安全?(蜜源)

    我先说下为什么会出现StringBuffer 和 StringBuilder?我们知道String 是被final修饰的字符串常量,长度是不可变,所以在字符串拼接的时候如果使用 String 的话性能会很低,因此就出现了长度可变的StringBuffer 和 StringBuilder,StringBuilder是非线程安全的,StringBuffer是线程安全的(使用 synchronized 同步来保证线程安全),因此StringBuilder在性能上要优于 StringBuffer,在非并发操作的环境下可使用 StringBuilder 来进行字符串拼接。

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。

    扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    windows服务器下安装APC
    (经验)在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序
    网站访问计数器
    网站计数器代码(jsp版本)
    .NET2.0隐形的翅膀,正则表达式搜魂者
    PHP中array数组教程
    [Python] py2exe先知其然
    [Python] Ubuntu12.04LTS
    [Python] 中文
    [linux] is not in the sudoers file
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/12252622.html
Copyright © 2011-2022 走看看