Метод addExact
Метод addExact класса Math выполняет сложение двух чисел
и возвращает результат. В отличие от обычного оператора +,
этот метод проверяет, не произошло ли переполнение типа.
В первый параметр мы передаем первое слагаемое,
во второй - второе слагаемое. Если сумма выходит
за границы допустимых значений типа int или long,
метод выбрасывает исключение ArithmeticException.
Метод имеет две перегрузки: для типа int и для типа long.
Это позволяет безопасно складывать числа, не опасаясь
незаметного переполнения, которое в обычной арифметике
приводит к неверному результату.
Синтаксис
Math.addExact(a, b)
Пример
Давайте сложим два числа в пределах допустимых значений типа int:
public class Main
{
public static void main(String[] args)
{
int res = Math.addExact(3, 4);
System.out.println(res);
}
}
Результат выполнения кода:
7
Пример
Давайте сложим два числа типа long:
public class Main
{
public static void main(String[] args)
{
long res = Math.addExact(1000000000L, 2000000000L);
System.out.println(res);
}
}
Результат выполнения кода:
3000000000
Пример
Давайте попробуем сложить два числа, сумма которых
превышает максимальное значение типа int,
и перехватим исключение:
public class Main
{
public static void main(String[] args)
{
try
{
int res = Math.addExact(Integer.MAX_VALUE, 1);
System.out.println(res);
}
catch (ArithmeticException e)
{
System.out.println("Overflow detected");
}
}
}
Результат выполнения кода:
"Overflow detected"
Пример
Давайте убедимся, что обычное сложение в этой же ситуации дает неверный результат без всякого предупреждения:
public class Main
{
public static void main(String[] args)
{
int res = Integer.MAX_VALUE + 1;
System.out.println(res);
}
}
Результат выполнения кода:
-2147483648
Смотрите также
-
класс
Math,
который содержит математические методы -
метод
multiplyExact,
который умножает с проверкой переполнения -
метод
negateExact,
который меняет знак с проверкой переполнения -
метод
incrementExact,
который увеличивает на единицу с проверкой переполнения