【发布时间】:2015-01-10 05:51:57
【问题描述】:
这是 LongMath.checkedAdd() 方法的代码,该方法在溢出或下溢时抛出算术异常。
public static long checkedAdd(long a, long b) {
long result = a + b;
checkNoOverflow((a ^ b) < 0 | (a ^ result) >= 0);
return result;
}
static void checkNoOverflow(boolean condition) {
if (!condition) {
throw new ArithmeticException("overflow");
}
}
我理解为什么这个 API 正在测试 (a ^ result) 但我不明白包含这个条件的原因: (a ^ b)
【问题讨论】:
-
如果
a和b的符号相反,那么它们的加法 不可能溢出。 -
你说得对,我错过了!适合这种情况。
标签: math overflow guava integer-arithmetic underflow