条件语句——在Java中,检查一个值是否大于零比检查一个值是否等于零更快吗?如果是,为什么呢?



我在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,代码运行时间为1ms。为什么由于这个更改而导致运行时出现跳跃?也就是说,Java是如何实现x != yx > y的?

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

相关内容

最新更新