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