要是你实在需要纠结性能的话。你可以这样写。。
int len = "stephen ".length();
char[] vals = new char[len+1];
for (int i = 0; i < 10; i++) {
        vals[len] = (char)i;   //是否需要转义,不确定。
        System.out.println(new String(vals));
    }
这样可以节约一半的内存消耗。

解决方案 »

  1.   

    建议第二种吧,虽说String和其他类不太一样,但是重新声明String的话还会在堆栈里开辟一块位置存放地址的
      

  2.   

    兄弟们,别争论了,这事我经历过。结论是两种性能一样。
    因为java编译器会将第第一种优化成第二种,所以性能一样。
    但是写第一种会更直观和更简单,易于维护。
    所以大家写的时候,尽管按照第一种写吧,也不用担心性能问题。担心性能的,都是老旧的不知道几百年前的编译器了!
      

  3.   

    对应String这种特殊的类,两者的区别不大。如果是初始化类时间比较长,或者占用空间较大的,就使用第二种!
      

  4.   

    还是有区别的,第一种会创建一个句柄,在循环结束之后依然存在,说白了就是有语法上的差别。

    会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
    怎么可能会被清空。
    上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。
      

  5.   

    还是有区别的,第一种会创建一个句柄,在循环结束之后依然存在,说白了就是有语法上的差别。

    会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
    怎么可能会被清空。
    上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。嗯……这个清空是猜测的,暂时没有根据,暂时收回,回头有证据再回复哈。
      

  6.   

    还是有区别的,第一种会创建一个句柄,在循环结束之后依然存在,说白了就是有语法上的差别。

    会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
    怎么可能会被清空。
    上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。在main方法结束后,存放在栈里的string会被回收吧
      

  7.   

    从性能的角度讲两者是一样的,都是每次for循环一次内存地址保存字符串,这样效率较差
    ,当for循环的循环次数较大时就能明显表现出来建议用StringBuffer来连接字符串效率很高
      

  8.   

    特别推荐第一种!其实两种情况都会去申请新的内存,这是JAVA机制造就的。而缩小变量的作用域,就意味着:
    1. 变量能更早的被回收
    2. 减少错误的概率所谓推荐第二种的,完全是不了解内存分配机制吧
      

  9.   

    建议使用第二种
    将String换成StringBuider或者StringBuffer,性能更好。