我正在研究OpenJDK的来源。
Byte.compare()和Integer.compare()的方法吸引了我的注意力。
public static int Byte.compare(byte x, byte y) {
return x-y;
}
public static int Integer.compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}为什么Byte.compare()和Integer.compare()方法有不同的实现?
发布于 2013-11-12 08:20:39
Integer.compare的实现不使用减法,因为如果将接近Integer.MIN_VALUE的整数与接近Integer.MAX_VALUE的整数进行比较,则可能会导致溢出。
在Byte.compare情况下不会发生这种溢出,因为在计算x-y之前,字节值被隐含地转换为整数。
(另见:Java语言规范- 5.6.2二进制数字提升)
发布于 2013-11-12 08:23:27
拜特方法可以这样实现,因为减法的结果在int中是可表示的。另一种情况则并非如此。例如:
0 - 0x80000000 == 0x80000000这是负的,因此比较错误地表明0小于-2^31。
https://stackoverflow.com/questions/19924044
复制相似问题