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.


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.


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);

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.