为什么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