• String、StringBuilder、StringBuffer


      从一开始学java时就知道如果要String是常量,StringBuilder和StringBuffer是变量,如果需要对一个字符串进行拼凑,一般都用后两者,并且也知道String的“+”其实是会新建对象的,除此之外还知道StringBuffer是安全的。但是最近在项目中,几乎在字符串的拼凑上都是采用StringBuilder。

      刚看了一篇文章,写得很清晰,很简单https://www.cnblogs.com/su-feng/p/6659064.html,我这里为了加深影响,便引用过来。

    关于速度

      StringBuilder > StringBuffer > String

      
      这里只说关于String慢的原因,我就直接引用博主所给

    String str="abc";
    System.out.println(str);
    str=str+"de";
    System.out.println(str);

      这段代码表面上看似乎我们修改了str这个变量,但是事实上并不是,JVM在处理这段代码时在第3行中,JVM会新建一个对象str,并将之前的str值加上"de"之后赋值给它,并将之前的str值“abc”回收。

      如果我们对字符串不断的拼凑,JVM就会不断的回收、新建,这会涉及到地址的分配等等一些列操作,这就是之所以其速度慢的原因。

      

    关于安全

      一直都在吼什么StringBuilder是不安全的,我之前是这样记的,builder嘛,建筑者,搞建筑需要戴安全帽,因为不安全(似乎很傻),但是Builder为什么不安全呢,SrtingBuffer就是安全的呢,博主给的解释很好:

      如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

      

    总结

      依旧引用博主

      String:适用于少量的字符串操作的情况
      StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
      StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

     

  • 相关阅读:
    C++各种进制的转换
    C++获取当前目录
    【转】Caffe初试(十)命令行解析
    libsvm下的windows版本中的工具的使用
    libsvm的数据格式及制作
    【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优
    【转】Caffe初试(九)solver及其设置
    【转】Caffe初试(八)Blob,Layer和Net以及对应配置文件的编写
    【转】Caffe初试(七)其它常用层及参数
    Ubuntu 14.04 安装 Sublime Text 3
  • 原文地址:https://www.cnblogs.com/numen-fan/p/8579528.html
Copyright © 2020-2023  润新知