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来连接字符串就会解决上述问题。

  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/cjh-code/p/11808108.html
Copyright © 2011-2022 走看看