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