Java在做數值相乘時,有可能因為計算結果超過int
或long
的上限而發生溢位(arithmetic overflow)進而導致結果錯誤。
要預防計算時出現溢位,可使用Java 8才有的Math.multiplyExact()
,使用此方法來相乘兩個數值,若發生溢位則會拋出ArithmeticException
錯誤,然後錯誤發生時用try-catch block捕捉並處理。
下面範例使用兩數值相加造成溢位,並使用Math.addExact()
相加。
int x = Integer.MAX_VALUE; // 2147483647
int y = 1;
System.out.println(x + y); // integer overflow -9223372036854775808
try{
Math.addExact(x, y);
}catch(ArithmeticException e){
System.out.println("x + y 造成溢位並丟出ArithMeticException");
}
long m = Long.MAX_VALUE; // 9223372036854775807
long n = 1;
System.out.println(m + n); // long overflow -9223372036854775808
try{
Math.addExact(m, n);
}catch(ArithmeticException e){
System.out.println("m + n 造成溢位並丟出ArithMeticException");
}
輸出結果如下
-2147483648
x + y 造成溢位並丟出ArithMeticException
-9223372036854775808
m + n 造成溢位並丟出ArithMeticException
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
沒有留言:
張貼留言