下述代码,被提出意见,说效率低。 for(int i = 0; i<10000; ++i){
           //转化为String               
   new Integer(i).toString;
}给我的评审意见如下:new Integer(i).toString考虑使用Integer的静态方法替代。对此不太理解,查了API文档,发现Integer类,确实有下述 String toString() 
          返回一个表示该 Integer 值的 String 对象。 
static String toString(int i) 
          返回一个表示指定整数的 String 对象。 两种方法,但我应该如何修改。修改之后,如何可以提高效率,请指教一二,谢谢!!

解决方案 »

  1.   

    好像应该是这个意思,这样不用每次申请Integer了 for(int i = 0; i<16; ++i){
    user.setEnablePassword(i, Integer.toString(i));
    }谁来回个贴,我给分结贴了
      

  2.   


    for(int i = 0; i<10000; ++i){
            //转化为String               
       Integer.toString(i);
    }
      

  3.   

    new Integer()一次创建一个对象,你循环了10000次就创建了10000个Integer对象,而调用静态方法不用创建Integer对象
      

  4.   

    静态的方法,域是属于类的,跟你创建多少对象都没有关系,  没有副本.!
    在这里用静态方法不用每次都创建Integer对象了.!
      

  5.   


        for(int i = 0; i<1000000; ++i){
               //转化为String               
           System.out.println(new Integer(i).toString());
        }
        for(int i = 0; i<1000000; ++i){
               //转化为String               
           System.out.println(Integer.toString(i));
        }两种方式下,运行需要的时间都是18‘90左右没有看出哪个效率更优!请大侠们指正!
      

  6.   


    public class C {
    public static void main(String[] args) {
    method1();
    method2();
    } public static void method1() {
    long start = System.currentTimeMillis();
    for (int i = 0; i < 1000000; ++i) {
    // 转化为String
    new Integer(i).toString();
    }
    long end = System.currentTimeMillis();
    System.out.println("非静态" + (end - start) + "毫秒");
    } public static void method2() {
    long start = System.currentTimeMillis();
    for (int i = 0; i < 1000000; ++i) {
    // 转化为String
    Integer.toString(i);
    }
    long end = System.currentTimeMillis();
    System.out.println("静  态" + (end - start) + "毫秒");
    }
    }
      

  7.   

    效率低不仅指运行时间,还有消耗的内存也要算进去,每次创建一个Integer对象消耗的内存肯定比用静态方法多。
      

  8.   

    public class IntegerTest {
    public static void main(String[] args) {
               System.out.println("第一种:");
        for(int i = 0; i<10000; ++i){           
           Integer.toString(i);
        }
        System.out.println("第二种:"); 
        for(int i = 0; i<10000; ++i){           
           (new Integer(i)).toString();
       }
    }
    }
    //第一种要比第一种效率高。原因在于第二种方式多创建了10000个Integer对象!
    以下是用javap -c IntegerTest后的字节码文件(相当于汇编)内容:public class IntegerTest2 extends java.lang.Object{
    public IntegerTest2();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   returnpublic static void main(java.lang.String[]);
      Code:
       0:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
       3:   ldc     #3; //String 第一种:
       5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
    ing;)V
       8:   iconst_0
       9:   istore_1
       10:  iload_1
       11:  sipush  10000
       14:  if_icmpge       28
       17:  iload_1
       18:  invokestatic    #5; //Method java/lang/Integer.toString:(I)Ljava/lang/St
    ring;
       21:  pop
       22:  iinc    1, 1
       25:  goto    10
       28:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
       31:  ldc     #6; //String 第二种:
       33:  invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
    ing;)V
       36:  iconst_0
       37:  istore_1
       38:  iload_1
       39:  sipush  10000
       42:  if_icmpge       63
       45:  new     #7; //class java/lang/Integer
       48:  dup
       49:  iload_1
       50:  invokespecial   #8; //Method java/lang/Integer."<init>":(I)V
       53:  invokevirtual   #9; //Method java/lang/Integer.toString:()Ljava/lang/Str
    ing;
       56:  pop
       57:  iinc    1, 1
       60:  goto    38
       63:  return}注意第45行,有个new关键字,创建了Integer对象,而第一种方式却没有。
    line:18和line:53是创建字符串对象。
      

  9.   

    以后要主意String啊,得小心从事。