Java 为什么Byte.compare()和Integer.compare()的实现方式不同?

Java 为什么Byte.compare()和Integer.compare()的实现方式不同?,java,compareto,Java,Compareto,我正在研究OpenJDK的源代码 我的注意力被方法Byte.compare()和Integer.compare()所吸引: public static int Byte.compare(字节x,字节y){ 返回x-y; } 公共静态整数。比较(整数x,整数y){ 回报率(x

我正在研究OpenJDK的源代码

我的注意力被方法
Byte.compare()
Integer.compare()
所吸引:

public static int Byte.compare(字节x,字节y){
返回x-y;
}
公共静态整数。比较(整数x,整数y){
回报率(x

为什么方法
Byte.compare()
Integer.compare()
有不同的实现?

Integer.compare的实现不使用减法,因为在比较接近
integer.MIN\u值
的整数与接近
integer.MAX\u值
的整数时,这可能会导致溢出

如果是
字节,则不会发生此溢出。比较
,因为在计算
x-y
之前,字节值会隐式转换为整数


(另请参见:)

字节方法可以通过这种方式实现,因为减法的结果可以在
int
中表示。另一种情况并非如此。例如:

0 - 0x80000000 == 0x80000000

这是负数,因此比较会错误地表明0小于-2^31

@Discipol您的陈述是正确的,但这不是这种情况下的原因!;)嘿,整数比较从不返回正数,这只是+-1中的一个输入错误吗?粘贴的代码段中似乎有一个错误:它应该是
return(x0 - 0x80000000 == 0x80000000