for(int i = 100000; i > 0; i–) {} 
for(int i = 1; i < 100001; i++) {} 

解决方案 »

  1.   

    研究这些有用么
    有这时间研究一下java的内存模型 原理什么的 
      

  2.   

    public class TEST12 
    {
    public static void main(String[] args)
    {
    int count1=0,count2=0;
    for(int i = 100000; i > 0; i--) {count1++;}  
    for(int i = 1; i < 100001; i++) {count2++;}
    System.out.println(count1+" "+count2);
    }
    }
    100000 100000
      

  3.   

    诚迈科技公司采取欧美软件外包市场最领先的“ODC(离岸开发中心)”与项目接单相结合的外包服务模式
      

  4.   

    这2个for循环本来就循环次数一样啊,你没有理解题目意思:这个是一道面试题,所以拿来讨论一下·
      

  5.   

    运行测试了下,楼主所给的循环次数没有多大区别,基本上差不多。但是将循环次数增大,就可以发现后者循环的运行速度更快。测试代码:
    public class ForTest { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO 自动生成方法存根 long t1 = System.currentTimeMillis();
    for(int i = 1000000000; i > 0; i--) {}
    long t2 = System.currentTimeMillis();
    System.out.println(t2-t1);

    long t3 = System.currentTimeMillis();
    for(int i = 1; i < 1000000001; i++) {} 
    long t4 = System.currentTimeMillis();
    System.out.println(t4-t3);
    }}
    运行结果1:
    3055
    1874运行结果2:
    3336
    1889运行结果3:
    2914
    1883
      

  6.   


    int count1 = 0, count2 = 0;
            long time = System.currentTimeMillis();   
    for (int i = 100000; i > 0; i--) {
    count1++;
    }
    System.out.println(System.currentTimeMillis() - time);  
    time = System.currentTimeMillis();   
    for (int i = 1; i < 100001; i++) {
    count2++;
    }
    System.out.println(System.currentTimeMillis() - time);  
    println是 0,0后面我把循环放大了10000倍。
    结果是1140,1125我记得以前看过,应该是+比-快,*比/快。
      

  7.   

    如果是面试题,我就答当然选第二种。第一就是可读性,正常人都会觉得第二种好读。第二就是可用性,这循环用法,大多是数组等的吧,一般数组都是顺着读吧?第三就是,性能上讲,其实这两句代码,可能对足够“聪明”的编译器来讲可能是一样的,说不定编译出来的class文件本身就是一样的呢。
      

  8.   

    11楼这样测试是不对的,
    你换成
    public class ForTest {    /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO 自动生成方法存根         long t3 = System.currentTimeMillis();
            for(int i = 1; i < 1000000001; i++) {} 
            long t4 = System.currentTimeMillis();
            System.out.println(t4-t3);        long t1 = System.currentTimeMillis();
            for(int i = 1000000000; i > 0; i--) {}
            long t2 = System.currentTimeMillis();
            System.out.println(t2-t1);
            
                }}
    运行看看
      

  9.   

    -- 要快些
    具体原因我在下边帖里说过
    http://topic.csdn.net/u/20100526/09/54b69af7-de38-44e5-aff9-a15fca4b2407.html
      

  10.   

    在10亿级别测,貌似每次都是--慢,但是在百亿级别就是--快了,快25秒不会是假的快了吧
    public class Test { public static void main(String[] args) throws InterruptedException {
    long t3 = System.currentTimeMillis();
    for(long i = 1; i < 20000000001l; i++) {
    }
    long t4 = System.currentTimeMillis();
    System.out.println(t4 - t3); long t1 = System.currentTimeMillis();
    for(long i = 20000000000l; i > 0; i--) {
    }
    long t2 = System.currentTimeMillis();
    System.out.println(t2 - t1); }
    }
    75678
    50289
      

  11.   

    貌似我的电脑上面跑出来的都是差不多,应该CPU的处理直接会影响程序的快慢了
      

  12.   


    性能差别可能就在 i>0 和 i<10001 上。
    jvm指令前者用 ifgt ,直接判断是否大于0
    后者用 if_icmpgt,需要和10001做比较最终被JIT翻译成本机代码也会不同,显然i>0效率更高。但这点儿差别可以忽略不计,java里更需要优化的地方多着呢。
      

  13.   

    是啊 不同类型cpu会有不同结果吗 还是jvm的关系 我测下来很稳定的,减少一个数量级
    14750
    9531
    一直保持在相差50%左右 至少对我这个测试环境来说已经是成立了 还有什么其他原因吗怕两者顺序的影响,分别起程序单独测
    --一直稳定在10000
    ++一直稳定在15000对这个特定测试环境来说速度差值保持在一个较稳定的水平