Biginteger java: робота з великими числами
Мова Java в основному використовується для написання великих корпоративних веб-додатків. Однак він також застосуємо і інших предметних областях, де досить часто виникає необхідність в роботі з дуже великими числами. Хоча в Java є примітивні типи, бувають ситуації, де і їх недостатньо.
Відео: Java SE: Урок 10. Арифметичні і Математичні операції
Відомо, що у всіх примітивів є одна неприємна особливість - переповнення типу, при якому вихід за межі допустимих значень призводить до некоректних обчислень. Для цього існує спеціальний клас BigInteger. Java не була б Java, якби в ній не було окремого класу з функціональністю і для цього випадку. Розглянемо його докладніше.
Клас BigInteger Java: опис
Як ви вже зрозуміли, клас BigInteger служить оболонкою для великих цілочисельних значень. Щоб инкапсулировать число в об`єкт даного типу, можна використовувати одну з перевантажень його конструкторів, або статичний метод valueOf. Конструктор в якості аргументу може приймати рядок або масив байтів. Для перетворення простих типів, що представляють цілі числа, в BigInteger Java використовують статичний метод valueOf.
Оскільки в Java можливість перевантаження операторів відсутній, для виконання математичних операцій над інкапсульованими в даному класі значеннями, передбачені відповідні методу. Про них далі і піде мова.
Java BigInteger: методи і приклади їх використання
Даний клас має в своєму арсеналі безліч методів, які дозволяють маніпулювати числовими значеннями і щоб між ними чинити різноманітні математичні операції. Нижче наведено список цих методів.
Розберемо методи, які виконують арифметичні операції:
- add (value) - можна додавати значень поточного об`єкта, з переданим в якості аргументу;
Відео: #Java Урок 24 Великі числа. Порівняння. Обчислення з великою точністю
- subtract (subtractor) - виконує віднімання subtractor від поточного значення;
- multiply (value) - виконує множення;
- divide (divider) - виконує ділення поточного значення на divider;
- pow (int arg) - зводить значення викликав об`єкта в ступінь, величиною в arg;
- abs () - повертає абсолютне значення викликав об`єкта;
- negate () - повертає об`єкт BigInteger, значення якого має протилежний знак.
Давайте розберемо простий приклад виконання арифметичної операції над двома інкапсульованими в об`єкт значеннями:
- BigInteger val1, val2, adding, dividing, oppositeSign;
- val1 = new BigInteger (&ldquo-5&rdquo-);
- 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.
Відео: Практичний вебінар на тему "Java interview Питання і відповіді"
висновок
Як бачите, клас BigInteger Java надає різні інструменти для операцій над дуже великими числами. При цьому переповнення типів виключено, так як безпека в Java має один з найвищих пріоритетів, природно без шкоди функціональності.