Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Math.addExact()

Складывает два числа и бросает ArithmeticException при переполнении. Рядом — multiplyExact(), toIntExact().

Доступно с: Java 8

Синтаксис

public static int addExact(int x, int y)

Параметры

ПараметрТипОписание
xint, longПервое слагаемое.
ysame 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 overflow

toIntExact() безопасно превращает 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, их диапазоны и переполнение.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.