Math.addExact()
Складывает два числа и бросает ArithmeticException при переполнении. Рядом — multiplyExact(), toIntExact().
Доступно с: Java 8
Синтаксис
public static int addExact(int x, int y)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| x | int, long | Первое слагаемое. |
| y | same type as x | Второе слагаемое. |
Возвращаемое значение
same type as xСумма, если она помещается в тип.
Примеры
Обычный + молча переполняется, addExact() сообщает об ошибке:
void main() {
int big = Integer.MAX_VALUE;
IO.println(big + 1);
IO.println(Math.addExact(big, 1));
}Результат:
-2147483648
Exception in thread "main" java.lang.ArithmeticException: integer overflowtoIntExact() безопасно превращает long в int:
void main() {
long small = 1_000L;
long huge = 5_000_000_000L;
IO.println(Math.toIntExact(small));
try {
Math.toIntExact(huge);
} catch (ArithmeticException e) {
IO.println("Error: " + e.getMessage());
}
}Результат:
1000
Error: integer overflowПримечания
Семейство методов: addExact(), subtractExact(), multiplyExact(), incrementExact(), negateExact(), toIntExact(). Они нужны там, где переполнение означает ошибку в данных: деньги, счётчики, размеры. Если числа действительно бывают огромными, используйте BigInteger или BigDecimal.
См. также
- Integer.MAX_VALUE — Наибольшее значение типа int; рядом — Integer.MIN_VALUE.
- ArithmeticException — Возникает при недопустимой арифметической операции, например целочисленном делении на ноль.
- BigInteger — Целое число любого размера — когда не хватает даже long.
- Long.parseLong() — Превращает строку с целым числом в long — для чисел, которые не помещаются в int.
В учебнике
- Примитивные типы — Восемь примитивных типов Java: int, long, double, float, char, boolean, byte и short, их диапазоны и переполнение.