在Java中,检查值是否大于零比检查值是否等于零更快?如果是这样,为什么?

时间:2016-08-11 07:00:07

标签: java conditional

我在Leetcode上实现了一个片段,我的初始循环就像这样:

    //n and x are an integer and a double respectively
    long N = Math.abs((long)n);
    double result = 1;
    while(N != 0){
        if((N & 1) == 1){
            result *= x;
        }
        N = N >> 1;
        x *= x;
    }

整个代码需要2ms才能运行。然后我将N != 0更改为N > 0,代码运行时间为1毫秒。由于这种变化,为什么运行时会出现跳跃?换句话说,Java如何实现x != yx > y

1 个答案:

答案 0 :(得分:-1)

可能是因为当jvm检查N > 0时,它只查找表示符号的字节,当jvm检查N != 0时,它需要遍历变量中的所有字节。