string str1="1"+"2"+"3"+....+"1000";   1式
string str2;
for(int i = 1; i <=1000 ;i++)
str2+=i;                       2式
stringbuffer str3 = new stringbuffer();
for(int i = 1; i <=1000 ;i++)
str3 = str3.append(i);        3式
1式和2式那个执行速度快?
2式和3式那个执行速度快?
为什么?请大虾们指点一下!

解决方案 »

  1.   

    string str1="1"+"2"+"3"+....+"1000";  1式 
    这个最快,因为"1"+"2"+"3"+....+"1000"这些链接是在编译时就完成的,不占用运行时间。string str2; 
    for(int i = 1; i <=1000 ;i++) 
    str2+=i;                      2式 
    这个最慢,因为每次循环都要生成一个StringBuilder对象,连接,然后再转为String。stringbuffer str3 = new stringbuffer(); 
    for(int i = 1; i <=1000 ;i++) 
    str3 = str3.append(i);       3式 这个只创建一个StringBuffer对象,中间存在若干次数组的重新分配。
      

  2.   

    1比2快
    3比2快
    1比2快
    1快因为在编译的时候编译器就把当做一个String放到一起了
    2最慢因为每次都会生成一个新的String
    String是immutable的
      

  3.   

    1>3>2
    1没有循环,在编译的时候进行了优化..
    2需要循环每次都要创建String对象.
    3只有一个StringBuffer对象对它进行操作.
      

  4.   

    我是初学者,还只学了一点点哦,我的观点可不一定正确。我认为1比2快,3比2快,因为1式是字符串和“+”,根据Java的处理,会直接给str1赋值123...1000的,而StringBuffer这个具体原因我还真不知道,我看的书上(《Core Java》)说的原因我不记得了,就记得说这个东西速度比较快。2式要循环那么多,肯定慢的吧
      

  5.   


    这个, 1 在编译是优化有一个对象, 是最快的, 运行不需要生成对象,
    2在运行期生成了很多对象 原因用了+操作。 这个是JAVA的重载了的运算符。
    3 stringbuffer  是为了解决2的效率问题 的, 
      

  6.   

    3如果是用stringbuilder的话是最快的 1的累加也会生成许多stringbuilder对象
      

  7.   

    1式 这个最快,这个在编译时就完成了创建. 2式 最慢,不仅要每次循环,而且+每次都会生成一个StringBuilder对象,连接后再转为String,在赋值给原引用。 3式也很快,只不过当添加数据将满的时候,会存在若干次数组的重新分配问题,略费时间。 
      

  8.   

    int num = 100000;
    String str1="";
    String str2=""; 
    StringBuffer str3= new StringBuffer(); 

    long startTime = System.currentTimeMillis();
    for( int t=0; t<num; t++)
    {
    str1="1"+"2"+"3"+"4"+"5"+"6"+"7"+"8"+"9"+"10";
    }
    long to = System.currentTimeMillis() - startTime;
    System.out.println(" T0= "+to );


    startTime = System.currentTimeMillis();
    for( int t=0; t<num; t++)
    {
    for(int i = 1; i <=10 ;i++) 
    str3 = str3.append(i);     
    }
    long t2 = System.currentTimeMillis() - startTime;
    System.out.println(" T2= "+t2 );


    // startTime = System.currentTimeMillis();
    // for( int t=0; t<num; t++)
    // {
    // for(int i = 1; i <=10 ;i++) 
    // str2 += i;
    // }
    // long t1 = System.currentTimeMillis() - startTime;
    // System.out.println(" T1= "+t1 );
    TO = 16;
    T2 = 203;
    T1 无法完成计算 需要时间太长 我没耐心等待了!
     大家都说对了!
    1>3>22 是最不可取的 因为 他 需要
    1+2 的时候生成 12
    +3 的时候 生成 123
    等等
    每个循环都要生成 "i" 和结果 2个字符串测试结果 已经给出 
    如果 输入比较麻烦 就采用 第3种方式 他和第一种方式 相差不错
    总比用一天时间来输入 1+2+...+1000的好! 程序运行也的考虑 人工费用 和阅读代码的难以啊!