本帖最后由 BaronZ 于 2012-12-02 22:17:50 编辑

解决方案 »

  1.   

    看看就明白:http://zhidao.baidu.com/question/301700630.html
      

  2.   

    append是追加字符串,不会生成一个新的对象,+号,没+一次就生成一个新的对象,你说循环1000此,多少字符串对象?可以想象那种效率高了。
      

  3.   

    sb.append(i+"");
    你这个有点自欺欺人了...这个写法和上面那个有区别吗...都是做了一次字符串加
    这个应该这样写
    sb.append(i).append("[凡是用加号连接的部分]");
      

  4.   

    百度知道上的空上好像有点道理,高手吗觉得怎样?
    str += "here";
    可以等同于
    StringBuffer sb = new StringBuffer(str);
    sb.append("here");
    str = sb.toString();
      

  5.   

    http://blog.csdn.net/yirentianran/article/details/2871417这个博客写的挺好的,其实+的连接操作实现上还是通过StringBuffer或者StingBuild实现的,+操作和StringBuffer的效率在于,当大数据量操作时,+需要创建多次StringBuffer对象,然后再append,区别应该就在这里。
      

  6.   

    其实主要原因不是LZ说的空间的问题,假设空间足够大,你再多的对象不回收和这个效率没有多大关系的。
    5 楼说的对一半,主要原因是 循环的过程,对于 String的 新对象(即 +),首先会转换成StringBuffered,然后生成新的对象,再从 StringBuffered转变成为所需的String;
    而对象StringBuffered 则不会产生新的对象,也就是说在循环结束之前都一直追加结束。
    从上面的过程,就知道 对于用第一种情况,效率当然不高了。
      

  7.   

    我补充吧,本来我还怕我说的不对,后来我去查了一下资料,确实了我的答案,我整理了一下,LZ 应该可以清楚了,这次:
    首先,我在 14 楼说的对了,举个简单的例子吧:
    对于String 类,有一个字符串并接,也就是“+”,操作符的运算。
    对于 String s = "a" + "4" + "b";
    等价于:
    String s = new StringBuffered().append("a").append("4").append("b").toString();
    (这里是合并着写)。
    这个例子足够说明我在 14 楼说的观点了。