Konwersja z Integer do BigInteger

129

Zastanawiałem się, czy istnieje sposób na przekonwertowanie zmiennej typu Integer na BigInteger. Próbowałem typecastingu zmiennej Integer, ale pojawia się błąd, który mówi o typie nieodwracalnym.

Steffan Harris
źródło
12
zadałeś kilka pytań dotyczących BigInteger, które można by dość łatwo rozwiązać, czytając Javadocs. Kliknij link w mojej odpowiedzi i sprawdź wszystkie metody i konstruktory, które ma BigInteger.
jjnguy

Odpowiedzi:

239

Potrzebna metoda to BigInteger # valueOf (long val) .

Na przykład,

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

Tworzenie najpierw łańcucha jest niepotrzebne i niepożądane.

jbindel
źródło
2
@Mich, nie. Jeśli jest to liczba całkowita, Java automatycznie ją rozwinie. (OP mówi, że ma liczbę całkowitą)
jjnguy
To by działało równie dobrze. Na Integer intValue () nie przepełni się, więc wywołanie valueOf po prostu rozszerzy int do long. Nie ma zauważalnej różnicy między użyciem longValue () i intValue () w tym przykładzie, ale gdyby zaczął od Long, chciałby użyć longValue ().
jbindel
2
Amar, byłoby to podobne do innych podejść opartych na łańcuchach. Kluczową rzeczą, której należy tutaj unikać, jest generowanie lub analizowanie ciągów znaków.
jbindel
1
Nie chodzi o to, że użycie ciągu znaków dałoby złą odpowiedź, ale to dodatkowa praca dla komputera. Na przykład możesz przejść do sąsiedniego domu, idąc obok, lub możesz iść w przeciwnym kierunku i objechać prawie całą kulę ziemską. Nadal byś się tam dostał, a jeśli masz szybki samolot rakietowy, możesz nie zauważyć czasu, jaki to zajęło, ale jest to marnotrawstwo i zajmuje trochę czasu.
jbindel,
1
A co z przypadkami, gdy myInteger ma wartość null, będzie to NPE.
Wizzard
-4

Możesz to zrobić w ten sposób:

    Integer i = 1;
    new BigInteger("" + i);
Giorgios Karagounis
źródło
5
Możesz, ale dlaczego miałbyś to zrobić? W przyjętej już odpowiedzi proponuje się znacznie lepsze rozwiązanie.
Colin,
Tworzenie łańcuchów do wykonywania obliczeń całkowitoliczbowych marnuje więcej cykli procesora, niż chciałbyś zliczyć.
jbindel