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

  • 相关阅读:
    Linux sed命令
    Linux之read命令使用
    Linux shell之数组
    Linux Shell脚本攻略:shell中各种括号()、(())、[]、[[]]、{}的作用
    shell中的${},##, %% , :- ,:+, ? 的使用
    hostname命令
    进度条的制作-python
    33 Python 详解命令解析
    Python 学习笔记 多进程 multiprocessing--转载
    Spring注解(生命周期)
  • 原文地址:https://www.cnblogs.com/cjh-code/p/11808108.html
Copyright © 2020-2023  润新知