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

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;


RISEBY
浏览 1916回答 3
3回答

LEATH

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

GCT1015

比较两个数值的减法“技巧”被打破!!!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a&nbsp;=&nbsp;-2000000000; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;b&nbsp;=&nbsp;&nbsp;2000000000; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a&nbsp;-&nbsp;b); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;prints&nbsp;"294967296"这里a < b,又a - b是积极的。不要使用这个成语。它不起作用。而且,即使它确实有效,它也不会在性能上提供任何显着的改进,并且实际上可能具有成本可读性。也可以看看Java Puzzlers&nbsp;Puzzle 65:可疑排序的奇怪传奇这个难题有几个教训。最具体的是:除非您确定值之间的差异永远不会大于,否则不要使用基于减法的比较器&nbsp;Integer.MAX_VALUE。更一般地说,要小心int溢出。另一个教训是你应该避免“聪明”的代码。努力编写清晰,正确的代码,除非证明有必要,否则不要对其进行优化。

千万里不及你

简单来说,int类型不足以存储两个任意int值之间的差异。例如,15亿和15亿之间的差异是30亿,但int不能超过21亿。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java