Вы не можете «предотвратить» переполнение.Это очевидно, потому что тип данных int
имеет диапазон значений.При добавлении чисел с помощью оператора +
результат int + int
имеет тип int
.
Что вы хотите сделать, это, возможно, предотвратить неожиданные результаты, и в этом случае вы бы хотели знатьчто произошло переполнение.Для этого вы можете использовать:
try {
Math.addExact(a, b);
} catch(ArithmeticException ex) {
// If this exception is raised, then you know
// that an overflow occured, and you can handle it
// more appropriately.
}
При этом вы можете обрабатывать случай переполнения и не использовать неожиданные значения.Но переполнение все же произошло.Когда ваш тест выполнен по этому методу:
Math.addExact(Integer.MAX_VALUE, 1)
Возникает следующее исключение:
java.lang.ArithmeticException thrown: integer overflow
at Math.addExact (Math.java:825)
Другой вариант - использовать long
, чтобы разрешить большие значения.Для этого вам нужно привести хотя бы одно из значений к long
:
(long)Integer.MAX_VALUE + 1
В результате long
value 2147483648