Javaで整数の足し算の際にオーバーフローを検知する方法について記載します。
目次
整数の足し算でオーバーフローを検知する方法
Mathクラス の addExact メソッドを使用すると、オーバーフロー発生時に例外( java.lang.ArithmeticException )がスローされます。
引数には、int・long型 の値を指定することができます。
構文
Math.addExact( 値1, 値2 )
戻り値
引数に int型 を指定:戻り値も int型
引数に long型 を指定:戻り値も long型
引数に long型 を指定:戻り値も long型
1. int型の値を加算する
実行例( int型 の最大値 + 1 )
1 2 3 4 5 6 7 |
// int型の最大値(2147483647)に1足す // +演算子を使用して加算する int sum1 = Integer.MAX_VALUE + 1; // -2147483648( オーバーフロー発生 ) // Math.addExact を使用して加算する int sum2 = Math.addExact(Integer.MAX_VALUE, 1); // 例外発生( ArithmeticException ) |
例外処理は、次のように try – catch で行います。
1 2 3 4 5 6 |
// オーバーフロー時の例外をキャッチする try { int sum2 = Math.addExact(Integer.MAX_VALUE, 1); }catch( ArithmeticException e ) { // オーバーフロー時の処理 } |
2. long型の値を加算する
実行例( long型 の最大値 + 1 )
1 2 3 4 5 6 7 |
// long型の最大値(9223372036854775807)に1足す // +演算子を使用して加算する long sum1 = Long.MAX_VALUE + 1; // -9223372036854775808( オーバーフロー発生 ) // Math.addExact を使用して加算する long sum2 = Math.addExact(Long.MAX_VALUE, 1); // 例外発生( ArithmeticException ) |
例外処理も、int型と同様に try – catch を使って処理します。
1 2 3 4 5 |
try { long sum2 = Math.addExact(Long.MAX_VALUE, 1); }catch( ArithmeticException e ) { // オーバーフロー時の処理 } |