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

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

           相同点:三者都可以存储和操作字符串

          不同点:

               可变性:  String类使用final关键字字符数组保存字符串(private final char value[]) 所有String对象是不可变得,而StringBuffe和StringBuilder都使用字符数组保存字符串     (char[] value)但没有用final修饰,所以二者是可变的

       线程安全性:String对象是不可变得,可以认为是常量,线程安全AbstractStringBuilder是StrinBuilder和StringBuffer公共父类,定义了一些字符串的基本操作,           StringBuffer对方法加上了同步锁或者对调用方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

         性能:每次对String类型进行修改,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对  象并改变对象的引用,相同情况下StringBuilder相比使用StringBuffer仅能获得10%~15%左右的性能提升,但却要冒着多线程不安全的风险

       总结:

        操作少量的数据(String)

        单线程操作字符串缓冲区下操作大量数据(StringBuilder)

        多线程操作字符串缓冲区下操作大量数据(StringBuffer)

    什么情况下用“+”运算符进行字符串连接比调用StringBuffer/String Builder对象的 append 方法连接字符串性能更好?

      Java 编译器将"+"编译成了 StringBuilder

           字符串可以直接使用“+”进行连接,在Java中无论使用何种方式进行字符串连接,实际上都使用的是StringBuilder,

      “+”和StringBuilder的运行结果是完全等效的,但二者的运行效率和消耗资源方面有很大的区别:

      当连接的字符串表达式比较简单那么二者基本一样,如果字符串比较复杂(使用循环连接字符串)使用“+”消耗资源(每循环一次都会创建一个StringBuilder对象,会占用到量的资  源),直接使用StringBuilder来连接字符串就会解决上述问题。

  • 相关阅读:
    CSS标题省略号带后缀名称
    vue post下载
    PiNetwork – 国外手机挖矿,目前国外热度很高
    iview table expand 单击当前行控制
    iview 开关变化时控制状态的变更
    CSS伪元素before,after制作左右横线中间文字效果
    idea 修改代码自动编译
    如何获取微信公众号的关注链接?
    震惊,微信小程序可以设置网络字体!真香
    小程序字体大小怎么设置,小程序修改字体样式方法
  • 原文地址:https://www.cnblogs.com/cjh-code/p/11808108.html
Copyright © 2011-2022 走看看