Manchmal sehe ich, dass APIs longoder Longoder intoder 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 longoder Longoder intoder verwenden Integer, und ich kann nicht herausfinden, wie die Entscheidung dafür getroffen wird?
Wann soll ich was wählen?
Antworten:
Longist die ObjectForm von longund Integerist die Objektform von int.
Der longverwendet 64 Bit . Der intverwendet 32 Bit und kann daher nur Zahlen bis zu ± 2 Milliarden (-2 31 bis +2 31 -1) aufnehmen.
Sie sollten longund verwenden int, es sei denn, Sie müssen Methoden verwenden, von denen geerbt wurde Object, z hashcode. Java.util.collectionsMethoden verwenden normalerweise die Box- ObjectVersionen ( umhüllt), da sie für alle funktionieren Objectmüssen und ein primitiver Typ wie intoder longkein ist Object.
Ein weiterer Unterschied besteht darin , dass longund intsind Pass-by-Wert , während Longund Integersind Pass-by-Referenzwert , wie alle nicht-primitive Java - Typen. Wenn es also möglich wäre, ein Longoder 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 Longoder sein Integerkönnte null.
Es gibt einige Dinge, die Sie mit einem primitiven Typ nicht tun können:
nullWertObjects funktioniertSofern Sie keinen dieser Typen benötigen, sollten Sie primitive Typen bevorzugen, da diese weniger Speicher benötigen.
int, wenn Sie Zahlen halten.intzu klein ist, verwenden Sie alonglongzu klein ist, verwenden SieBigIntegerCollection, Handling null, ...), verwenden Sie stattdessen Integer/LongAn intist eine 32-Bit-Ganzzahl. a longist eine 64-Bit-Ganzzahl. Welche verwendet werden soll, hängt davon ab, wie groß die Zahlen sind, mit denen Sie voraussichtlich arbeiten werden.
intund longsind primitive Typen, während Integerund LongObjekte 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 intin einer verwenden Listkönnen).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 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,
intder übergelaufen war, als mehr als 2.147.483.647 Aufrufe zu einem beliebten Video empfangen wurden. Da einIntZä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, Shortauch)
Sie können verwenden die intganze Zeit, aber Integerenthä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