2014-10-03 31 views
7

W języku Java, aby przekonwertować ciąg do BigInteger, należy użyć konstruktora new BigInteger(String), ale w celu konwersji int/long należy użyć funkcji fabrycznej BigInteger.valueof(long), dlaczego tak jest?Dlaczego jest BigInteger (String), ale nie BigInteger (długa)?

+2

Tak właśnie zaprojektowali go, kiedy go zbudowali. Musiałbyś zapytać tego, kto stworzył BigInteger to pytanie. – brso05

+0

Zazwyczaj implementacja buforuje wspólne wartości, takie jak dodatnie liczby całkowite bliskie 0. –

+0

@JakeCobb - dokładnie - w tym przypadku buforuje wartości między -16 a 16. – Krease

Odpowiedz

11

W rzeczywistości jest konstruktorem BigInteger(long), ale jest prywatny. Javadoc na metodzie fabrycznego dostarcza informacji o tym, dlaczego:

Ta „metoda statyczna fabryki” jest wyposażony w preferencji do (długiej) konstruktora, ponieważ pozwala na ponowne wykorzystanie często używanych BigIntegers.

20

@Morad można znaleźć odpowiedź w docs: JavaDoc of BigInteger.valueOf(long):

Ta „metoda statyczna fabryki” jest wyposażony w preferencji do (długiej) konstruktora, ponieważ pozwala na ponowne wykorzystanie często używanych BigIntegers .

Poradnik: BigInteger.valueOf(long) robi dokładnie to, czego można oczekiwać od konstruktora BigInteger(long), i to jest (lub powinna być) bardziej wydajne w nim.