突然想到一个经常遇到的 循环中的条件判断问题, 就实验了一下, 结果很让人不解, 请看下面代码
第一部分, 循环中写不写else 效率相差相差 40% , 按理说,第一种写法比第二种判断次数还多了一次 ,结果却比第二种快很多
如果去掉 那个 else , 两种写法就相同了, 运行时间也相同
高手解答
public static void main(String[] args) {
int count = 100000000;       //循环次数
               //  第一部分
long start1 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){

}
if(i == 2000){

}
}
long end1 = System.currentTimeMillis();
System.out.println(end1 - start1);

               // 第二部分
long start2 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){

}
else           //此处else  写与不写 效率相差很大
if(i== 2000){

}
}
long end2 = System.currentTimeMillis();
System.out.println(end2 - start2);
}结果:  
119
173

解决方案 »

  1.   

    假设这样理解:每次判断耗费时间片1 第一种:第一个if耗费了count次,第二个if耗费了count次。第二种:第一个if耗费了count次,同时,当i不等于1000的时候,else必然要执行,这里是count-1次,
    然后else内部的if又要执行count-1次。第二次消耗的时间片多大概50%。
      

  2.   


    是这样,第二种方法多出的时间 应该是消耗在 else 身上的, 但是为什么 这个else 会这么耗时?
    本身有什么特殊的 ? 如果这样, 以后 还不如不写这个 else 
      

  3.   

    else也有他的作用啊;比如当 i=1000就执行某个操作,i不等于1000就执行其他操作,这就用到else了。
    至于else之后再判断i等于2000,确实没必要。
      

  4.   

    我当然知道else 的作用, 我的主要困惑在于 else 减少了一次判断 ,却大幅增加了 运行时间, 这是为什么
      

  5.   

    你钻牛角尖了~~用else执行之后再用if判断肯定会增加时间。
      

  6.   

    如果看执行代码,有else应该是多了1次跳转语句另外像这种
                if(i == 1000){
                    
                }
                if(i == 2000){
                    
                }
    两次判断条件互斥,没有相关性,完全可以不用else
      

  7.   

    运行速度快的机子,加了else是浪费时间,
    运行速度慢的机子,加了else增加效率。
      

  8.   

    不会吧, 时间一样的话,把 那个else 去掉 看看 是不是还一样 ?
    两个 if ()  必然会条件互斥,   但我加了 else  明明减少了一次判断, 时间却在增加
    如果说加上else 有一个 跳转 需要耗时 , 这个说法能说通  ,并且 去掉 else 里面判断之后 耗时和判断两次差不多
    所以else关键字 本事 耗时相当于一次判断 ,真是奇怪
      

  9.   

    这个要看你的jdk版本了。不同的版本,速度都不一样。
      

  10.   

    多了一行代码
    多了好多cpu指令
    时间肯定更多些不过都基本可以忽略