我正在使用 Spring MVC 3.0.5。Spring 很高兴地忽略了映射到 Integer 的字段的 Integer 溢出。我怎样才能报告正确的错误?
问问题
858 次
2 回答
4
这不是 Spring 问题,而是一般 Java 问题。Java 没有像 C 那样的溢出问题,但它环绕整数。
@Test
public void demoIntegerWrapp(){
int value = Integer.MAX_VALUE;
value += 1;
assertEquals(Integer.MIN_VALUE, value);
}
所以最好的想法是使用 long 进行计算并检查结果是否在整数范围内,否则抛出异常。
public int overflowSaveAdd(int summand1, int summand2) {
long sum = ((long) summand1) + ((long) summand2);
if (sum < Integer.MIN_VALUE ) || (sum > Integer.MAX_VALUE) {
throw new RuntimeException(sum + " is too big for integer");
} else {
return (int) sum;
}
}
于 2011-05-20T06:59:09.317 回答
1
有提供安全算术运算的 Java 库,用于检查整数上溢/下溢。例如,Guava 的IntMath.checkedAdd(int a, int b)返回 and 的a
和b
,前提是它没有溢出,ArithmeticException
如果a + b
在有符号int
算术中溢出则抛出。
于 2012-12-02T23:39:05.743 回答