是因为System.out.println("ok" + i);引起的。print调外部设备那是java不可控的。 这样试试 long a = System.currentTimeMillis(); long count = 0; for(int i=0; i<500000000; i++){ if(1 < (7 * 24 * 60 * 60 * 1000)) { //改成if(1 < 604800000){ 执行时间反而更长了。何解???? // if(1 < 604800000){ // System.out.println("ok" + i); count += i; } } long b = System.currentTimeMillis(); System.out.println("count is :" + count + ". time=" + (b-a));
两次的class文件同为 public static void main(String[] args) { long a = System.currentTimeMillis(); for (int i = 0; i < 5000000; ++i) { System.out.println("ok" + i); } long b = System.currentTimeMillis(); System.out.println("time=" + (b - a)); }时间差,是由系统环境引起的,不是代码引起的
这样试试
long a = System.currentTimeMillis();
long count = 0;
for(int i=0; i<500000000; i++){
if(1 < (7 * 24 * 60 * 60 * 1000)) { //改成if(1 < 604800000){ 执行时间反而更长了。何解????
// if(1 < 604800000){
// System.out.println("ok" + i);
count += i;
}
}
long b = System.currentTimeMillis();
System.out.println("count is :" + count + ". time=" + (b-a));
{
long a = System.currentTimeMillis();
for (int i = 0; i < 5000000; ++i)
{
System.out.println("ok" + i);
} long b = System.currentTimeMillis();
System.out.println("time=" + (b - a));
}时间差,是由系统环境引起的,不是代码引起的
即时这样写 if(1 < (7 * 24 * 60 * 60 * 1000)) 编译器也会优化成 if(1 < 604800000)至于说你执行时间有差距,是因为你没有办法排除所有的外来干扰。
Date 的实现中取得时间就是System.currentTimeMillis()
放在同一行,有时两个数值会相同,有时后面会比前面慢一点点
这个差异就是计算机的cpu造成的,指不定哪次执行时,cpu空闲,就快一点,哪次cpu忙,执行的就慢一点
楼主的情况,跟这个是差不多的
此言差矣,无论是 1 < (7 * 24 * 60 * 60 * 1000) 还是 if(1 < 604800000)
编译器都会发现结果是true,跳过这段直接编译,实际上编译后执行的就会是: for(int i=0; i<5000000; i++){
System.out.println("ok" + i);
}执行时长和这两个半毛钱关系都没有
此言差矣,无论是 1 < (7 * 24 * 60 * 60 * 1000) 还是 if(1 < 604800000)
编译器都会发现结果是true,跳过这段直接编译,实际上编译后执行的就会是: for(int i=0; i<5000000; i++){
System.out.println("ok" + i);
}执行时长和这两个半毛钱关系都没有我以为他写的是i<,我感觉楼主应该也是想写i<吧,写1<也没啥意义啊。
你怎么确定是优化过的,你是猜的吧?有证据吗?我想告诉你的是我当然有证据。
我写的一段代码,源码如下: public static void main(String[] args) {
int i=0;
if(i<3*7){
System.out.println("aaa");
}
if(1<3*7){
System.out.println("bbb");
}
}
编译之后,再反编译的代码如下: public static void main(String[] args)
{
int i = 0;
if (i < 21) {
System.out.println("aaa");
} System.out.println("bbb");
}
你可以反编译class文件看看,这里的if判断被果断跳过啊!