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)?
7
A
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.
Tak właśnie zaprojektowali go, kiedy go zbudowali. Musiałbyś zapytać tego, kto stworzył BigInteger to pytanie. – brso05
Zazwyczaj implementacja buforuje wspólne wartości, takie jak dodatnie liczby całkowite bliskie 0. –
@JakeCobb - dokładnie - w tym przypadku buforuje wartości między -16 a 16. – Krease