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 回答
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
溢出。另一个教训是你应该避免“聪明”的代码。努力编写清晰,正确的代码,除非证明有必要,否则不要对其进行优化。
添加回答
举报
0/150
提交
取消