可能是重复问题:
如何检查在Java中将两个数字相乘是否会导致溢出?
假设我有一个 Java 类的方法,使用了*
和+
运算符。
int foo(int a, int b) { ... // 使用 + 和 * 进行一些计算 }
如何确保在foo
中不会发生溢出?
我想我可以使用BigDecimal
或者将所有+和*替换为“包装器”:
int sum(int a, int b) { int c = a + b; if (a > 0 && b > 0 && c < 0) throw new MyOverfowException(a, b) return c; }
int prod(int a, int b) { int c = a * b; if (a > 0 && b > 0 && c < 0) throw new MyOverfowException(a, b) return c; }
还有更好的方法可以确保在 Java 方法中不会发生int
溢出吗?
a
和b
是正整数有信心,因此如果结果为负数,则发生了溢出。 - Duncan Jonesa
和b
都是正数,您的产品功能也无法正常工作,因为结果可能会溢出并仍然为正数,例如1000000000 * 15 = 2115098112
。 - verdesmarald