1 String str="abc"+"de";
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
3 System.out.println(str);
4 System.out.println(stringBuilder.toString());
String的速度却比StringBuilder的反应速度要快么?
有的人说是快,有的人说一样快,到底时怎么样的呢?

解决方案 »

  1.   

    一个是这么点字符串相加,量太少,不能真实反映性能,你起码循环比如10000次相加随机的字符串试试其次,要看JDK版本,1.8以后,String的相加也有使用StringBuilder的优化。所以两者差不多了
      

  2.   

    String是不可变长度的字符串
    StringBuffer是可变长度的字符串
    StringBuilder是效率更高的可变长度的字符串
    具体请见https://blog.csdn.net/yitian_66/article/details/79699174
      

  3.   

    普通写法应该是没啥区别的,编译后结果都一样如果能大概预知拼接后字符串长度,那提前设置StringBuilder大小,能省去不必要的扩容次数,扩容需要申请更大长度的数组和把原字符数组的元素复制到新数组中
      

  4.   

    明文字符串的加减比较没意义,"ab" + "c" 在编译时刻就已经视为一个整体了……
      

  5.   

    多次拼接用StringBuilder,一次用String方便
      

  6.   

    我是看你标题的StringBuffer 进来的 哈哈,  大部分人都会习惯用StringBuilder吧, 但是非常小的量级就无所谓了, 然后7楼说的也是
      

  7.   

    看看自己的ide开发工具,现在很多java 类,方法体中String 拼接  class编译后都被改成StringBuilder的方式。
      

  8.   

    只要不是用循环超过20次,用啥方法都一样。超过20次追加字符串用StringBuilder 。20次是我自己给自己的标准。。
      

  9.   

    可以参考 think in  java. 里面有从编译角度比较
      

  10.   

    用String +号最字符串拼接,底层使用的还是StringBuffer  可以通过反编译软件查看下。所以基本没有什么区别。
    但是在做循环的时候,使用+号做拼接,循环一次会创建一个StingBuffer对象。。所以在循环里使用要注意~
      

  11.   

    但是string拼接是消耗内存,但效率应该一样的。当然了,内存不够用的话还是stringbuffer效率高。
      

  12.   

    java 编译器升级很多次了,对于 String的拼接的表达式有优化。
    而StringBuilder比较适合未知次数的循环中字符串拼接。
    StringBuilder中的内存空间会随调用调整,如果经常调整的话,性能也不会很好,
    因此如果一开始设定一个较大空间数,也可以提升性能。
      

  13.   

    确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接   所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为  StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
      

  14.   

    首先,由于String每次修改都要生成一个新的的对象,所以经常修改的推荐另外的两个,当然StringBuffer比较合适,但是并不是所有的String操作都比较慢,有些特殊情况,他的拼接会被JVM解析为StringBuilder对象拼接,就像
    String str="abc"+"de";
    StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
      

  15.   

    StringBuffer 效率高
      

  16.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢
      

  17.   

    少了用加号,多了用stringbuffer,实际工作中统计报表stringbuffer拼接sql语句。
      

  18.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢
    我说的是对加号操作的内置优化,你怎么扯到stringBuilder自身了
      

  19.   


    这跟IDE没半毛钱关系,JDK支持就支持,不支持就不支持!
    IDE编译也是调用JDK的编译器而已!
      

  20.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢Java 编程思想至少在02年就有出版了 !
      

  21.   

    StringBuilder是效率更高
      

  22.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢
    我说的是对加号操作的内置优化,你怎么扯到stringBuilder自身了
    看最后一句,07年出的书上面已经说明了这个优化。而那时候还没有1.8
      

  23.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢Java 编程思想至少在02年就有出版了 !
    恩 但是我只看过第三版,这里没说明
      

  24.   

    应该是StringBuffer
      

  25.   

    本来亲测。多次拼接建议用StringBuffer或者StringBulder。因为String的值是不可变,每次拼接都相当于重新new了一个,当拼接次数多了就会影响性能,严重时甚至会宕机。
      

  26.   

    理论上来说StringBuffer或者StringBulder最优,毕竟从头到尾都只有一个实例。String连接的话,每次连接就要new一个String对象,次数多了或病发率高的话,会导致频繁的GC。所以建议用StringBuffer或者StringBulder。
    当然如果你用户就那么几个,效率要求不高的话String也行。
      

  27.   

    StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢
    今天看了下书,在编译期确实从1.5开始进行优化,编译过程使用StringBuilder,我一定是被infoq上的一篇文章蒙骗了,书上还说虽然拼接在编译过程使用StringBuilder但是它是在循环内创建所以 还是推荐StringBuilder
    又有一篇文章提出了大体量下+和StringBuilder的性能 https://www.cnblogs.com/edhn/p/3289879.html所以目前 大方向推荐使用StringBuilder,最终都是编译好的才发布,垃圾会回收,写代码想咋写咋写。
      

  28.   

    +操作符编译期间被翻译成StringBuilder的append方式,所以两个是一样的。
    参考
    https://www.quora.com/How-do-I-add-two-strings-in-Java-using-the-+-operator-for-runtime-input
      

  29.   

    直接跑下代码,StringBuilder快很多
      

  30.   

    String是个final类,不可变,
    StringBuffer是可变长度的字符串
    StringBuffer效率高