Vla*_*mir 78 java optimization comparison integer overflow
我发现方法的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));
}
Run Code Online (Sandbox Code Playgroud)
问题是为什么使用比较而不是减法:
return thisVal - anotherVal;
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 63
比较两个数值的减法"技巧"被打破!!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
// prints "294967296"
Run Code Online (Sandbox Code Playgroud)
这里a < b,又a - b是积极的.
不要使用这个成语.它不起作用.
而且,即使它确实有效,它也不会在性能上提供任何显着的改进,并且实际上可能具有成本可读性.
这个难题有几个教训.最具体的是:除非您确定值之间的差异永远不会大于,否则不要使用基于减法的比较器
Integer.MAX_VALUE.更一般地说,要小心int溢出.另一个教训是你应该避免"聪明"的代码.努力编写清晰,正确的代码,除非证明有必要,否则不要对其进行优化.
| 归档时间: |
|
| 查看次数: |
12768 次 |
| 最近记录: |