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