Initialisierung von java.math.BigInteger

7

Es tut mir leid, weil das wie eine dumme Ja oder Nein Frage aussieht, aber ich bin sehr neu dazu, also brauche ich eine Antwort.

%Vor%

und

%Vor%

Sind sie gleich?

    
Harout 07.09.2016, 06:17
quelle

5 Antworten

3

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 .

  1. Das valueOf ist statisch, Sie müssen also kein Objekt erstellen, um den Wert zu erhalten.
  2. Wenn Sie den Konstruktor aufrufen, erhalten Sie jedes Mal ein neues Objekt.
Raman Sahasi 07.09.2016, 06:53
quelle
8

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:

%Vor%

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 ...

verwenden     
Jon Skeet 07.09.2016 06:21
quelle
5

Ja, in diesem Fall sind sie die gleichen (wenn Sie mit "gleich" meinen "Instanzen, die gleich sind"), und Sie könnten auch BigInteger.ZERO sagen.

Aber bei wirklich großen Zahlen können Sie nur den String-Konstruktor verwenden:

%Vor%     
Thilo 07.09.2016 06:22
quelle
3
%Vor%     
bhanu avinash 07.09.2016 06:25
quelle
1

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.

    
GhostCat 07.09.2016 06:22
quelle

Tags und Links