我刚跑了一下
 if(1 < (7 * 24 * 60 * 60 * 1000))    //time=60650
if(1 < 604800000)    //60263

解决方案 »

  1.   

    是因为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));
      

  2.   

    两次的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));
      }时间差,是由系统环境引起的,不是代码引起的
      

  3.   

    这两行代码的效果是一模一样的
    即时这样写 if(1 < (7 * 24 * 60 * 60 * 1000))  编译器也会优化成  if(1 < 604800000)至于说你执行时间有差距,是因为你没有办法排除所有的外来干扰。
      

  4.   

    楼主试一下System.out.println(System.currentTimeMillis() + " " + new Date().getTime()); 这行代码
    Date 的实现中取得时间就是System.currentTimeMillis()
    放在同一行,有时两个数值会相同,有时后面会比前面慢一点点
    这个差异就是计算机的cpu造成的,指不定哪次执行时,cpu空闲,就快一点,哪次cpu忙,执行的就慢一点
    楼主的情况,跟这个是差不多的
      

  5.   


    此言差矣,无论是  1 < (7 * 24 * 60 * 60 * 1000) 还是  if(1 < 604800000)
    编译器都会发现结果是true,跳过这段直接编译,实际上编译后执行的就会是:        for(int i=0; i<5000000; i++){
                    System.out.println("ok" + i);
            }执行时长和这两个半毛钱关系都没有
      

  6.   


    此言差矣,无论是  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");
      }
      

  7.   

    #8说的没错!!
    你可以反编译class文件看看,这里的if判断被果断跳过啊!