对于同一个条件使用for或while有区别码,有效率的问题码??for(int i=0;i<99999999;i++){
    doSth();
}int i=0;
while(i<99999999){
    doSth();
}int i=0;
while(true){
    if(i<99999999){
        doSth();
        continue;
    }
    break;
}请教对于上述的循环有没有效率的问题??

解决方案 »

  1.   

    第二个和第三个死循环,我进行了多次运行,每次运行所使用的时间都不一样,根本毫无规律,有时三个还是用一样的时间,我根据运行结果猜测三者应该没有区别;
      更改完后进行测试如下所示:
    package questions;
    //下面哪个运行更有效率
    public class TestFor2 {
    public static void main(String[] args) {
    long begin=System.currentTimeMillis();
    for(int i=0;i <1000000000;i++){ 
     ; 

            long end=System.currentTimeMillis();
            System.out.println(end-begin);
            begin=System.currentTimeMillis();
        int i=0; 
    while(i <1000000000){ //注意i的范围
    i++; 

            end=System.currentTimeMillis();
            System.out.println(end-begin);
            begin=System.currentTimeMillis();
     i=0; 
    while(true){ 
        if(i <1000000000){ 
        i++; 
            continue; 
        } 
        break; 

            end=System.currentTimeMillis();
            System.out.println(end-begin);
    }
    }
    几次运行结果:(1)787 (2)828 (3)813 (4)812(5)796 (6) 796
                     782     813      797     797     797      829
                     781     812      812     828     813      796
      

  2.   

    第二个和第三个死循环,我进行了多次运行,每次运行所使用的时间都不一样,根本毫无规律,有时三个还是用一样的时间,我根据运行结果猜测三者应该没有区别; 
      更改完后进行测试如下所示: 
    package questions; 
    //下面哪个运行更有效率 
    public class TestFor2 { 
    public static void main(String[] args) { 
    long begin=System.currentTimeMillis(); 
    for(int i=0;i <1000000000;i++){ 


            long end=System.currentTimeMillis(); 
            System.out.println(end-begin); 
            begin=System.currentTimeMillis(); 
        int i=0; 
    while(i <1000000000){ //注意i的范围 
    i++; 

            end=System.currentTimeMillis(); 
            System.out.println(end-begin); 
            begin=System.currentTimeMillis(); 
    i=0; 
    while(true){ 
        if(i <1000000000){ 
        i++; 
            continue; 
        } 
        break; 

            end=System.currentTimeMillis(); 
            System.out.println(end-begin); 


    几次运行结果:(1)787 (2)828  (3)813  (4)812(5)796 (6) 796 
                     782     813       797     797      797      829 
                     781     812       812     828      813      796 
      

  3.   

    第一个只能执行doSth()99999999次,是个固定次数;而第二和第三个可能出现的次数不固定,可能比99999999多,也可能比99999999少
      

  4.   

    不好意思,昨天写错了
    第二个和第三个不应该是死循环对于同一个条件使用for或while有区别码,有效率的问题码?? for(int i=0;i <99999999;i++){ 
        doSth(); 
    } int i=0; 
    while(i <99999999){ 
        doSth(); 
        i++;
    } int i=0; 
    while(true){ 
        if(i <99999999){ 
            doSth(); 
            i++;
            continue; 
        } 
        break; 
    } 感谢4楼的测试,我也试过了,没看出来有很大的区别