Sehen Sie sich die Dokumentation für beide an Methode und den Konstruktor .
public statisch BigInteger valueOf (long val)
Gibt einen BigInteger zurück, dessen Wert dem Wert der angegebenen Länge entspricht. Dieses "statisch Factory-Methode "wird einem (langen) Konstruktor vorgezogen weil es die Wiederverwendung häufig verwendeter BigIntegers ermöglicht.Parameter: val - Wert des zurückzugebenden BigIntegers.
Rückgabe: ein BigInteger mit dem angegebenen Wert.BigInteger (String val)
Übersetzt die dezimale String-Darstellung eines BigIntegers in einen BigInteger.
Sie erhalten beide einen Verweis auf BigInteger
mit einem Wert als 0
.
valueOf
ist statisch, Sie müssen also kein Objekt erstellen, um den Wert zu erhalten. Sie erhalten beide einen Verweis auf BigInteger
mit einem Wert von 0, aber sie sind nicht identisch. Insbesondere, da valueOf
eine statische Methode ist, kann sie Caching verwenden und dieselbe Referenz zurückgeben, wenn Sie sie zweimal aufrufen:
Das scheint nicht garantiert zu sein, aber es ist sicherlich etwas erwartet angesichts der Dokumentation :
Gibt eine
BigInteger
zurück, deren Wert dem Wert der angegebenen Länge entspricht. Diese "statische Factory-Methode" wird einem (langen) Konstruktor vorgezogen, da sie die Wiederverwendung häufig verwendeter BigIntegers ermöglicht.
Wenn Sie den Konstruktor aufrufen, erhalten Sie jedes Mal eine neue Instanz.
Das heißt, für dieses spezielle Beispiel würde ich einfach BigInteger.ZERO
...
Machen wir ein kurzes Experiment:
%Vor%Um genau zu sein: Sie haben hier zwei gleich BigInteger-Objekte. Da der BigInteger-Konstruktor nur die Eingabe von "ganzen" Ganzzahlen erlaubt; das gilt für alle Werte, die valueOf () Ihnen geben könnte.
Da diese beiden Objekte jedoch auf unterschiedliche Weise erstellt werden, haben Sie hier wirklich zwei verschiedene Objekte. Wenn valueOf (0) zweimal aufgerufen wird, kann das same -Objekt (Referenz) für beide Aufrufe sehr gut sein.
Tags und Links java biginteger