Перетворення з Integer в BigInteger


129

Мені було цікаво, чи є який-небудь спосіб перетворити змінну типу Integer в BigInteger. Я спробував ввести змінну Integer, але я отримав помилку, яка говорить про неперевершений тип.


12
Ви задали кілька питань щодо BigInteger, які можна було б вирішити досить легко, прочитавши Javadocs. Перейдіть за посиланням у моїй відповіді та ознайомтесь із усіма методами та конструкторами, якими володіє BigInteger.
jjnguy

Відповіді:


239

Метод, який ви хочете, є BigInteger # valueOf (довгий val) .

Наприклад,

BigInteger bi = BigInteger.valueOf(myInteger.intValue());

Створення рядка спочатку непотрібне та небажане.


2
@Mich, ні. Якщо це ціле число, Java автоматично розширить його для вас. (ОП каже, що у нього є цілий)
jjnguy

Це працювало б так само добре. У Integer intValue () не буде переповнений, тому виклик valueOf просто розширить int на довгі. У цьому прикладі немає помітної різниці між використанням longValue () та intValue (), але якби він почав з Long, він хотів би використовувати longValue ().
jbindel

2
Амар, це було б подібно до інших підходів на основі String. Тут важливо уникати будь-якого покоління або розбору рядків.
jbindel

1
Справа не в тому, що використання String дасть неправильну відповідь, але це додаткова робота для комп'ютера. Наприклад, ви можете піти по сусідньому будинку, йдучи по сусідству, або ви можете піти в зворотному напрямку і пройти майже всю земну кулю. Ви все одно потрапите туди, і якщо у вас швидкий ракетний літак, ви, можливо, не помітите часу, який він зайняв, але він марний, і це займе деякий час більше.
jbindel

1
А як щодо випадків, коли myInteger недійсний, це буде NPE.
Wizzard

-4

Ви можете зробити так:

    Integer i = 1;
    new BigInteger("" + i);

5
Ти можеш, але навіщо? Набагато краще рішення пропонується у вже прийнятій відповіді.
Колін

Створення рядків для виконання цілих математичних відходів більше циклів процесора, ніж ви б хотіли порахувати.
jbindel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.