为什么Byte.compare()和Integer.compare()实现不同?
我正在研究OpenJDK的来源。
我的注意力被Byte.compare()
和Integer.compare()
方法所吸引:
public static int Byte.compare(byte x, byte y) { return xy; } public static int Integer.compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); }
为什么Byte.compare()
和Integer.compare()
有不同的实现?
Integer.compare
的实现不使用减法,因为如果您将接近Integer.MIN_VALUE
的整数与接近Integer.MIN_VALUE
的整数进行比较,则可能会导致溢出。
在Byte.compare
情况下不会发生这种溢出,因为在计算xy
之前,字节值被隐式转换为整数。
(另见: Java语言规范 – 5.6.2二进制数字促销 )
Byte方法可以这样实现,因为减法的结果可以用int
来表示。 其他情况并非如此。 例如:
0 - 0x80000000 == 0x80000000
这是负面的,因此比较会错误地表明0小于-2 ^ 31