下述代码,被提出意见,说效率低。 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 对象。 两种方法,但我应该如何修改。修改之后,如何可以提高效率,请指教一二,谢谢!!
//转化为String
new Integer(i).toString;
}给我的评审意见如下:new Integer(i).toString考虑使用Integer的静态方法替代。对此不太理解,查了API文档,发现Integer类,确实有下述 String toString()
返回一个表示该 Integer 值的 String 对象。
static String toString(int i)
返回一个表示指定整数的 String 对象。 两种方法,但我应该如何修改。修改之后,如何可以提高效率,请指教一二,谢谢!!
user.setEnablePassword(i, Integer.toString(i));
}谁来回个贴,我给分结贴了
for(int i = 0; i<10000; ++i){
//转化为String
Integer.toString(i);
}
在这里用静态方法不用每次都创建Integer对象了.!
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左右没有看出哪个效率更优!请大侠们指正!
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) + "毫秒");
}
}
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是创建字符串对象。