Manchmal sehe ich, dass APIs long
oder Long
oder int
oder verwenden Integer
, und ich kann nicht herausfinden, wie die Entscheidung dafür getroffen wird?
Wann soll ich was wählen?
Manchmal sehe ich, dass APIs long
oder Long
oder int
oder verwenden Integer
, und ich kann nicht herausfinden, wie die Entscheidung dafür getroffen wird?
Wann soll ich was wählen?
Antworten:
Long
ist die Object
Form von long
und Integer
ist die Objektform von int
.
Der long
verwendet 64 Bit . Der int
verwendet 32 Bit und kann daher nur Zahlen bis zu ± 2 Milliarden (-2 31 bis +2 31 -1) aufnehmen.
Sie sollten long
und verwenden int
, es sei denn, Sie müssen Methoden verwenden, von denen geerbt wurde Object
, z hashcode
. Java.util.collections
Methoden verwenden normalerweise die Box- Object
Versionen ( umhüllt), da sie für alle funktionieren Object
müssen und ein primitiver Typ wie int
oder long
kein ist Object
.
Ein weiterer Unterschied besteht darin , dass long
und int
sind Pass-by-Wert , während Long
und Integer
sind Pass-by-Referenzwert , wie alle nicht-primitive Java - Typen. Wenn es also möglich wäre, ein Long
oder zu ändern Integer
(es ist nicht so, dass sie ohne Verwendung von JNI-Code unveränderlich sind), gäbe es einen anderen Grund, einen über den anderen zu verwenden.
Ein letzter Unterschied ist, dass ein Long
oder sein Integer
könnte null
.
Es gibt einige Dinge, die Sie mit einem primitiven Typ nicht tun können:
null
WertObject
s funktioniertSofern Sie keinen dieser Typen benötigen, sollten Sie primitive Typen bevorzugen, da diese weniger Speicher benötigen.
int
, wenn Sie Zahlen halten.int
zu klein ist, verwenden Sie along
long
zu klein ist, verwenden SieBigInteger
Collection
, Handling null
, ...), verwenden Sie stattdessen Integer
/Long
An int
ist eine 32-Bit-Ganzzahl. a long
ist eine 64-Bit-Ganzzahl. Welche verwendet werden soll, hängt davon ab, wie groß die Zahlen sind, mit denen Sie voraussichtlich arbeiten werden.
int
und long
sind primitive Typen, während Integer
und Long
Objekte sind. Primitive Typen sind effizienter, aber manchmal müssen Sie Objekte verwenden. Beispielsweise können Javas Auflistungsklassen nur mit Objekten arbeiten. Wenn Sie also eine Liste von Ganzzahlen benötigen, müssen Sie diese beispielsweise zu einer Liste machen List<Integer>
(die Sie nicht direkt int
in einer verwenden List
können).
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Wenn Ihre Verwendung einer Variablen in den 32-Bit-Bereich fällt, verwenden Sie Int
, andernfalls verwenden Sie long
. Normalerweise wird long für wissenschaftliche Berechnungen verwendet und solche Dinge erfordern viel Genauigkeit. (zB Wert von pi).
Ein Beispiel für die Auswahl eines über dem anderen ist der Fall von YouTube. Sie definierten zuerst den Videoansichtszähler als einen,
int
der übergelaufen war, als mehr als 2.147.483.647 Aufrufe zu einem beliebten Video empfangen wurden. Da einInt
Zähler keinen Wert speichern kann, der über seinem Bereich liegt, 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 als 64-Bit-Variable passt. Dies beansprucht doppelt so viel Speicher wie eine 32-Bit-Variable.
Wenn Sie eine sehr lange Zahl verwenden möchten, deren Darstellung 32 Bit überschreiten kann, können Sie long verwenden, um sicherzustellen, dass Sie kein seltsames Verhalten haben.
Ab Java 5 können Sie In-Boxing- und Out-Boxing-Funktionen verwenden, um die Verwendung von int und Integer vollständig gleich zu machen. Es bedeutet, dass Sie Folgendes tun können:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Die in und aus Boxen können Sie zwischen int und Integer ohne zusätzliche Konvertierung wechseln (gleich für Long
, Double
, Short
auch)
Sie können verwenden die int
ganze Zeit, aber Integer
enthält einige Hilfsmethoden , die Sie einige komplexe Operationen mit ganzen Zahlen zu tun , helfen kann (wie Integer.parseInt(String)
)
a) Objektklasse "Long" versus primitiver Typ "Long". (Zumindest in Java)
b) Es gibt verschiedene (sogar unklare) Speichergrößen der primitiven Typen:
Java - alles klar: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. nur Chaos: https://en.wikipedia.org/wiki/C_data_types