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 int
pass-by-value sind, wohingegen Long
und Integer
pass-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 Integer
null
sein könnte.
Es gibt einige Dinge, die Sie mit einem primitiven Typ nicht machen können:
null
-Wert habenObject
s funktioniertWenn Sie keine davon benötigen, sollten Sie primitive Typen bevorzugen, da diese weniger Speicher benötigen.
int
, wenn Sie Zahlen halten.int
zu klein ist, verwenden Sie eine long
long
zu klein ist, verwenden Sie BigInteger
Collection
setzen, null
, ...), verwenden Sie stattdessen Integer
/Long
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).
Java - alles klar: https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html
C .. nur durcheinander: https://en.wikipedia.org/wiki/C_data_types
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)
)
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
enthaltenLong
32 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
enthalten
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.