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

Jav*_*107 0 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在多次运行程序之后,我得出的结论是第二个循环总是比第一个循环执行得慢.起初,我认为它与一个for循环而另一个是while循环有关,但即使我颠倒顺序,第二个循环仍然执行得更慢.以下是样本运行的输出.

While loop = 688721817947
For loop = 688721824295
Difference = 6348
Run Code Online (Sandbox Code Playgroud)

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

dst*_*dst 6

您可以根据时间计算您的时间

fl = stop-start/2;
Run Code Online (Sandbox Code Playgroud)

由于运营商优先权:

fl = stop - (start / 2)
Run Code Online (Sandbox Code Playgroud)

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