我在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 != y
和x > y
?
答案 0 :(得分:-1)
可能是因为当jvm检查N > 0
时,它只查找表示符号的字节,当jvm检查N != 0
时,它需要遍历变量中的所有字节。