为了账号安全,请及时绑定邮箱和手机立即绑定

Java Integer compareTo() - 为什么使用比较与减法?

Java Integer compareTo() - 为什么使用比较与减法?

RISEBY 2019-08-02 17:29:34
Java Integer compareTo() - 为什么使用比较与减法?我发现方法的java.lang.Integer实现compareTo如下:public int compareTo(Integer anotherInteger) {     int thisVal = this.value;     int anotherVal = anotherInteger.value;     return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));}问题是为什么使用比较而不是减法:return thisVal - anotherVal;
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

这是由于整数溢出。当thisVal非常大且anotherVal为负时,从后者中减去后者产生的结果大于thisVal可能溢出到负范围的结果。


查看完整回答
反对 回复 2019-08-02
?
GCT1015

TA贡献1827条经验 获得超4个赞

比较两个数值的减法“技巧”被打破!!!

        int a = -2000000000;
        int b =  2000000000;
        System.out.println(a - b);
        // prints "294967296"

这里a < b,又a - b是积极的。

不要使用这个成语。它不起作用。

而且,即使它确实有效,它也不会在性能上提供任何显着的改进,并且实际上可能具有成本可读性。

也可以看看

  • Java Puzzlers Puzzle 65:可疑排序的奇怪传奇

    这个难题有几个教训。最具体的是:除非您确定值之间的差异永远不会大于,否则不要使用基于减法的比较器 Integer.MAX_VALUE。更一般地说,要小心int溢出。另一个教训是你应该避免“聪明”的代码。努力编写清晰,正确的代码,除非证明有必要,否则不要对其进行优化。


查看完整回答
反对 回复 2019-08-02
?
千万里不及你

TA贡献1784条经验 获得超9个赞

简单来说,int类型不足以存储两个任意int值之间的差异。例如,15亿和15亿之间的差异是30亿,但int不能超过21亿。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 1915 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信