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