java循环创建String对象很浪费时间吗?
如果是,那么用什么方法可以优化时间?

解决方案 »

  1.   

    如果循环次数不多。 问题都不大。 
    如果次数非常频繁。 那就用StringBuffer
      

  2.   

        上面的说的对,用StringBuffer连接字符串。
    你看一下jdk源码就可以知道,其实String连接字符串也是用的StringBuffer实现的。然后到最后使用toString()方法重新转换成String
       String和StringBuffer的区别是:
    例如:String a1= "a";
          String a2= "b";  
          String a3= a1+a2;
    在程序中,会为a1,a2,a3分别开辟内存地址,所以这就是为什么判断字符串相等要用equals()方法了。
    所以在循环体中,String连接时会不断的创建内存空间,不仅效率低,还耗内存。
        但是StringBuffer是一个特殊的类型,他不会重新创建内存空间,是在原来的地址空间上增长,效率会高一些。
    所以,如果存在循环,需要反复连接很多次字符串,就用StringBuffer
        StringBuffer str = new StringBuffer("");
        for(i=0;i<20;i++){
            str = str.append("a");
    }
        String string = str.toString();
    在上面的例子中,StringBuffer用append方法连接字符串,最后需要toString转换成String类型。
      

  3.   

    String 是每次创建新对象,开销较大,效率低。
    StringBuffer 对象里面直接添加数据。效率较高。
      

  4.   

    如果不考虑多线程StringBuilder 效率比 StringBuffer高
      

  5.   

    new String 比较花时间,效率低!!
      

  6.   

     上面的说的对,用StringBuffer动态连接字符串。
     你看一下jdk源码就可以知道,其实String连接字符串也是用的StringBuffer实现的。然后到最后使用toString()方法重新转换成String
        String和StringBuffer的区别是:
     例如:String a1= "a";
           String a2= "b";  
           String a3= a1+a2;
     在程序中,会为a1,a2,a3分别开辟内存地址,所以这就是为什么判断字符串相等要用equals()方法了。
     所以在循环体中,String连接时会不断的创建内存空间,不仅效率低,还耗内存。
         但是StringBuffer是一个特殊的类型,他不会重新创建内存空间,是在原来的地址空间上增长,效率会高一些。
     所以,如果存在循环,需要反复连接很多次字符串,就用StringBuffer
         StringBuffer str = new StringBuffer("");
         for(i=0;i<20;i++){
             str = str.append("a");
     }
         String string = str.toString();
     在上面的例子中,StringBuffer用append方法连接字符串,最后需要toString转换成String类型。
      

  7.   

    StringBuffer的很多方法都是加了线程同步的,如果楼主在字符串拼接过程中不需要考虑到线程同步的因素,并且拼接的比较频繁的话还是用StringBuilder吧