java - 在这段代码中,为什么第二个循环的执行速度比第一个循环慢?

标签 java loops for-loop while-loop execution-time

我在 Java 中有这段代码,使用两种不同类型的循环。

public class Test {
    public static void main(String[] args){
        long fl = 0, wl = 0; 
        int i = 0;
        int a = 0;
        long start = 0, stop = 0;

        start = System.currentTimeMillis();
        while(i<2000000000){
             if(i%2 == 0)
                a++;
            else
                a--;
            i++;
        }
        stop = System.currentTimeMillis();
        wl = stop-start/2;
        System.out.println("\nWhile loop = "+wl);

        i = 0;
        a = 0;
        start = 0;
        stop = 0;

        start = System.currentTimeMillis();
        for(;i<2000000000;){
            if(i%2 == 0)
                a++;
            else
                a--;
            i++;
        }
        stop = System.currentTimeMillis();
        fl = stop-start/2;
        System.out.println("For loop = "+fl);

        System.out.println("Difference = "+(fl-wl));
    }
}

现在,在多次运行程序之后,我得出的结论是,第二个循环的执行速度总是比第一个循环慢。起初,我认为这与一个是 for 循环,另一个是 while 循环有关,但即使我颠倒了顺序,第二个循环仍然执行得较慢。这是示例运行的输出。

While loop = 688721817947
For loop = 688721824295
Difference = 6348

现在,为什么会发生这种情况。

最佳答案

您计算的时间基于

fl = stop-start/2;

由于 operator precedence :

fl = stop - (start / 2)

我猜这不是你想要的,因为 100 毫秒后执行它会导致你的 fl 变量“更长”50ms ((stop + 100) - ((start + 100 )/2) = 停止 - (开始/2) + 50)。这可能是第二个总是“慢”的原因。

关于java - 在这段代码中,为什么第二个循环的执行速度比第一个循环慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18430471/

相关文章:

java - 尝试按 JButton 启动程序

java - 在 Java 中如何从计数器中减去一个值?

python - 有没有办法改变for循环的迭代器?

r - 使用 %like% 运算符创建子集

c++ - For循环在自己的花括号内

java - LinearLayout : 3 Elements, 顶部、中心、底部

java - OutOfMemoryError 之前的垃圾收集

Python - While 假循环

java - 当现有 PDF 文档中页面旋转为空时该怎么办?

javascript - while 循环函数的延迟