首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Byte.compare()和Integer.compare()的实现方式不同?

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

Stack Overflow用户
提问于 2013-11-12 08:16:08
回答 2查看 1.3K关注 0票数 40

我正在研究OpenJDK的来源。

Byte.compare()Integer.compare()的方法吸引了我的注意力。

代码语言:javascript
复制
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()方法有不同的实现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 08:20:39

Integer.compare的实现不使用减法,因为如果将接近Integer.MIN_VALUE的整数与接近Integer.MAX_VALUE的整数进行比较,则可能会导致溢出。

Byte.compare情况下不会发生这种溢出,因为在计算x-y之前,字节值被隐含地转换为整数。

(另见:Java语言规范- 5.6.2二进制数字提升)

票数 50
EN

Stack Overflow用户

发布于 2013-11-12 08:23:27

拜特方法可以这样实现,因为减法的结果在int中是可表示的。另一种情况则并非如此。例如:

代码语言:javascript
复制
0 - 0x80000000 == 0x80000000

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19924044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档