出乎我的意料呀!还有谁再做一次测试 这种情况好像是不计算x的值的,Delphi里面是不计算的,你可以debug跟踪一下看看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Test1 { private static final int _count = 100000000; public static void main(String[] args) { long t = System.currentTimeMillis(); for (int i = 0; i < _count; i++) { func1(i); } System.out.println(System.currentTimeMillis() - t); } static int func1(int i) { double x = 1.27 * 1.27 * 1.27 * 1.27; return i++; }}----------------------------------------------------------------------javap -classpath classes -c Test1--->public static void main(java.lang.String[]); Code: 0: invokestatic #2; //Method java/lang/System.currentTimeMillis:()J 3: lstore_1 4: iconst_0 5: istore_3 6: goto 17 9: iload_3 10: invokestatic #3; //Method func1:(I)I 13: pop 14: iinc 3, 1 17: iload_3 18: ldc #4; //int 1000000 20: if_icmplt 9 23: getstatic #5; //Field java/lang/System.out:Ljava/io/PrintStream; 26: invokestatic #2; //Method java/lang/System.currentTimeMillis:()J 29: lload_1 30: lsub 31: invokevirtual #6; //Method java/io/PrintStream.println:(J)V 34: returnstatic int func1(int); Code: 0: ldc2_w #7; //double 2.60144641d 3: dstore_1 4: iload_0 5: iinc 0, 1 8: ireturn}--------------------------从static int func1(int);可以看出:double x = 1.27 * 1.27 * 1.27 * 1.27;在编译时就已经算出来了,并保存在常量池中。 这也正常啊运算效率 java只能达到和c相当的水平吧 应该比c略低才对吧gz 改为这个再测试试for (int i = 0; i < 1000000; i++) { func1(i); }static int func1(int i) { double x = 1.27 * 1.27 * 1.27 * 1.27*((i*0)+1); return i++; } 这回不同了static int func1(int); Code: 0: ldc2_w #7; //double 2.60144641d 3: iload_0 4: iconst_0 5: imul 6: iconst_1 7: iadd 8: i2d 9: dmul 10: dstore_1 11: iload_0 12: iinc 0, 1 15: ireturn} 我认为这个题目应该进不了循环,因为INT 的范围好想没有那么大,而数据的存储会以反码的形式存在,1000000在里面是一个负数,所以进不了 Integer.MAX_VALUE == 2^32-1 == 2147483647 对JScrollBar做了监听 没反应? 急!!!请名位高手帮帮忙~~一个java小程序~~ 怎样用java程序打开注册表 谁能告诉我struct,spring,hibernate到底是什么? 请问SimpleDateFormat问题,对日期format后生成字符串,在对此字符串format就出错,不知道为什么? jTable的设计问题 在线等 jdk1.5的设置?好象跟1.4那些不一样的,我不知道怎么设置? 高分寻求JACK资料 一个二维数组的用法? 线程问题 求救;关于网络的问题 请问des对中文是怎么加密的!
long t = System.currentTimeMillis();
for (int i = 0; i < _count; i++) {
func1(i);
}
System.out.println(System.currentTimeMillis() - t);
} static int func1(int i) {
double x = 1.27 * 1.27 * 1.27 * 1.27;
return i++;
}
}
----------------------------------------------------------------------
javap -classpath classes -c Test1
--->public static void main(java.lang.String[]);
Code:
0: invokestatic #2; //Method java/lang/System.currentTimeMillis:()J
3: lstore_1
4: iconst_0
5: istore_3
6: goto 17
9: iload_3
10: invokestatic #3; //Method func1:(I)I
13: pop
14: iinc 3, 1
17: iload_3
18: ldc #4; //int 1000000
20: if_icmplt 9
23: getstatic #5; //Field java/lang/System.out:Ljava/io/PrintStream;
26: invokestatic #2; //Method java/lang/System.currentTimeMillis:()J
29: lload_1
30: lsub
31: invokevirtual #6; //Method java/io/PrintStream.println:(J)V
34: returnstatic int func1(int);
Code:
0: ldc2_w #7; //double 2.60144641d
3: dstore_1
4: iload_0
5: iinc 0, 1
8: ireturn}
--------------------------
从static int func1(int);可以看出:
double x = 1.27 * 1.27 * 1.27 * 1.27;在编译时就已经算出来了,并
保存在常量池中。
java只能达到和c相当的水平吧 应该比c略低才对吧
gz
func1(i);
}static int func1(int i) {
double x = 1.27 * 1.27 * 1.27 * 1.27*((i*0)+1);
return i++;
}
static int func1(int);
Code:
0: ldc2_w #7; //double 2.60144641d
3: iload_0
4: iconst_0
5: imul
6: iconst_1
7: iadd
8: i2d
9: dmul
10: dstore_1
11: iload_0
12: iinc 0, 1
15: ireturn}