BigInteger Java: работа с большими числами
Язык Java в основном используется для написания больших корпоративных веб-приложений. Однако он также применим и других предметных областях, где довольно часто возникает необходимость в работе с очень большими числами. Хотя в Java имеются примитивные типы, бывают ситуации, где и их недостаточно.
Известно, что у всех примитивов есть одна неприятная особенность – переполнение типа, при котором выход за пределы допустимых значений приводит к некорректным вычислениям. Для этого существует специальный класс BigInteger. Java не была бы Java, если бы в ней не было отдельного класса с функциональностью и для этого случая. Рассмотрим его подробнее.
Класс BigInteger Java: описание
Как вы уже поняли, класс BigInteger служит оболочкой для больших целочисленных значений. Чтобы инкапсулировать число в объект данного типа, можно использовать одну из перегрузок его конструкторов, либо статический метод valueOf. Конструктор в качестве аргумента может принимать строку либо массив байтов. Для преобразования простых типов, представляющих целые числа, в BigInteger Java используют статический метод valueOf.
Поскольку в Java возможность перегрузки операторов отсутствует, для выполнения математических операций над инкапсулированными в данном классе значениями, предусмотрены соответствующие метода. О них далее и пойдет речь.
Java BigInteger: методы и примеры их использования
Данный класс имеет в своем арсенале множество методов, которые позволяют манипулировать числовыми значениями и производить над ними разнообразные математические операции. Ниже приведен список этих методов.
Разберем методы, выполняющие арифметические операции:
- add(value) – выполняет сложение значений текущего объекта, с переданным в качестве аргумента;
- subtract(subtractor) – выполняет вычитание subtractor от текущего значения;
- multiply(value) – выполняет умножение;
- divide(divider) – выполняет деление текущего значения на divider;
- pow(int arg) – возводит значение вызвавшего объекта в степень, величиной в arg;
- abs() – возвращает абсолютное значение вызвавшего объекта;
- negate() – возвращает объект BigInteger, значение которого имеет противоположный знак.
Давайте разберем простой пример выполнения арифметической операции над двумя инкапсулированными в объект значениями:
- BigInteger val1, val2, adding, dividing, oppositeSign;
- val1 = new BigInteger(“5”);
- val2 = BigInteger.valueOf(10);
- adding = val1.add(val2);
- dividing = val2.divide(val1);
- oppositeSign = val1.negate();
Обратите внимание на способ создание объектов. Переменная val1 инициализировалась при помощи конструктора, принявшего строку, и хранит значение 5. val2 имеет значение 10 в результате работы статического метода valueOf. Значение переменной adding это результат сложение первых двух переменных и равно 15. Переменная dividing соответственно хранит результат вычитания. oppositeSign равен значению val1 с противоположным знаком, т. е. -5.
Заключение
Как видите, класс BigInteger Java предоставляет различные инструменты для операций над очень большими числами. При этом переполнение типов исключено, так как безопасность в Java имеет один из самых высоких приоритетов, естественно без ущерба функциональности.