it-swarm.com.de

Long vs Integer, long vs int, was ist wann zu verwenden?

Manchmal sehe ich APIs, die long oder Long oder int oder Integer verwenden, und weiß nicht, wie die Entscheidung dafür getroffen wird. 

Wann soll ich was wählen?

Long ist die Object-Form von long und Integer ist die Objektform von int.

Die long verwendet 64 Bits . Das int verwendet 32 ​​Bit und kann daher nur Zahlen bis zu ± 2 Milliarden (-2) enthalten31 bis +231-1).

Sie sollten long und int verwenden, es sei denn, Sie müssen Methoden anwenden, die von Object geerbt wurden, wie hashcode. Java.util.collections-Methoden verwenden normalerweise die geschachtelten (Object- Wrapped) -Versionen, da sie für jedes Object funktionieren müssen. Ein primitiver Typ wie int oder long ist kein Object.

Ein weiterer Unterschied ist, dass long und intpass-by-value sind, wohingegen Long und Integerpass-by-reference-Wert wie alle nicht primitiven Java-Typen sind. Wenn also Long oder Integer geändert werden könnten (dies ist nicht der Fall, da sie ohne JNI-Code unveränderlich sind), hätte es einen anderen Grund, einen über dem anderen zu verwenden.

Ein letzter Unterschied ist, dass Long oder Integernull sein könnte.

165
Borealid

Es gibt einige Dinge, die Sie mit einem primitiven Typ nicht machen können:

  • Einen null-Wert haben
  • auf sie synchronisieren
  • Verwenden Sie sie als Typparameter für eine generische Klasse und beziehen sich darauf:
  • Übergeben Sie sie an eine API, die mit Objects funktioniert

Wenn Sie keine davon benötigen, sollten Sie primitive Typen bevorzugen, da diese weniger Speicher benötigen.

24
  • Verwenden Sie standardmäßig eine int, wenn Sie Zahlen halten.
  • Wenn der Bereich von int zu klein ist, verwenden Sie eine long
  • Wenn der Bereich von long zu klein ist, verwenden Sie BigInteger
  • Wenn Sie Ihre Zahlen als Objekt behandeln müssen (beispielsweise, wenn Sie sie in eine Collection setzen, null, ...), verwenden Sie stattdessen Integer/Long
17
Joachim Sauer

int ist eine 32-Bit-Ganzzahl. Ein long ist eine 64-Bit-Ganzzahl. Welches davon verwendet wird, hängt davon ab, wie groß die Anzahl ist, mit der Sie arbeiten möchten.

int und long sind primitive Typen, während Integer und Long Objekte sind. Primitive Typen sind effizienter, aber manchmal müssen Sie Objekte verwenden. Java-Auflistungsklassen können beispielsweise nur mit Objekten arbeiten. Wenn Sie also eine Liste von Ganzzahlen benötigen, müssen Sie sie beispielsweise als List<Integer> definieren (Sie können int nicht direkt in List verwenden).

12
Jesper

Java - alles klar: https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

  • byte, Zeichen .. 1B .. 8b
  • short int .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • long int .. 8B .. 64b

C .. nur durcheinander: https://en.wikipedia.org/wiki/C_data_types

  • kurz .. .. 16b
  • int .. .. .. 16b ... wtf?!?!
  • lang .. .. 32b
  • lang lang .. 64b .. Chaos! : - /
1
Franta

Bei der Verwendung einer sehr langen Zahl, die 32 Bit überschreiten kann, können Sie mit Hilfe von long sicherstellen, dass kein ungewöhnliches Verhalten auftritt. 

Von Java 5 aus können Sie die Funktionen Inboxing und Outboxing verwenden, um die Verwendung von int und Integer völlig gleich zu machen. Es bedeutet, dass Sie Folgendes tun können: 

int myInt = new Integer(11);
Integer myInt2 = myInt;

Das In- und Out-Boxing ermöglicht das Umschalten zwischen int und Integer ohne weitere Konvertierung (auch für Long, Double, Short)

Sie können int die ganze Zeit verwenden, aber Integer enthält einige Hilfsmethoden, die Ihnen helfen können, einige komplexe Operationen mit Ganzzahlen auszuführen (wie Integer.parseInt(String))

1

Integer ist ein vorzeichenbehafteter 32-Bit-Typ

  • Bezeichnet als Int
  • Größe = 32 bits (4byte)
  • Kann ganze Zahlen des Bereichs -2,147,483,648 to 2,147,483,647 enthalten
  • standardwert ist 0


Long ist ein 64-Bit-Integer-Typ mit Vorzeichen

  • Bezeichnet als Long
  • Größe = 32 bits (8byte)
  • Kann ganze Zahlen des Bereichs -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 enthalten
  • standardwert ist 0L


Wenn Ihre Verwendung einer Variablen in den 32-Bit-Bereich fällt, verwenden Sie Int, andernfalls long. Normalerweise wird lang für wissenschaftliche Berechnungen verwendet, und solche Dinge erfordern viel Genauigkeit. (zB Wert von Pi).

Ein Beispiel für die Auswahl eines anderen ist der Fall von YouTube. Sie definierten zunächst den Video-View-Zähler als int, der überflutete, als mehr als 2.147.483.647 Aufrufe zu einem beliebten Video empfangen wurden. Da ein Int-Zähler keinen Wert über seinem Bereich speichern kann, hat YouTube den Zähler in eine 64-Bit-Variable geändert und kann jetzt bis zu 9.223.372.036.854.775.807 Aufrufe zählen. Verstehen Sie Ihre Daten und wählen Sie den Typ, der passt, da 64-Bit-Variablen doppelt so viel Speicher benötigen wie eine 32-Bit-Variable.

0