Мова 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 має один з найвищих пріоритетів, природно, без шкоди для функціональності.