Java 为什么Byte.compare()和Integer.compare()的实现方式不同?
我正在研究OpenJDK的源代码 我的注意力被方法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
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