Manchmal sehe ich die Verwendung von APIs long
oder Long
oder int
oder Integer
und ich kann mir nicht vorstellen, wie die Entscheidung dafür getroffen wird?
Wann soll ich was wählen?
Ich weiß, wie man das V ankreuzt
Manchmal sehe ich die Verwendung von APIs long
oder Long
oder int
oder Integer
und ich kann mir nicht vorstellen, wie die Entscheidung dafür getroffen wird?
Wann soll ich was wählen?
Borealis
Long
ist der Object
Form von long
und Integer
ist die Objektform von int
.
Das long
Verwendet 64 Bit. Das int
verwendet 32 Bit und kann daher nur Zahlen bis zu ±2 Milliarden (-231 bis +231-1).
Du solltest benutzen long
und int
außer wenn Sie geerbte Methoden verwenden müssen Object
wie zum Beispiel hashcode
. Java.util.collections
Methoden verwenden normalerweise das umrandete (Object
-wrapped) Versionen, weil sie für alle funktionieren müssen Object
und ein primitiver Typ, wie int
oder long
ist kein Object
.
Ein weiterer Unterschied besteht darin long
und int
sind Pass-by-Wertwohingegen Long
und Integer
sind Pass-by-Referenzwert, wie alle nicht primitiven Java-Typen. Wenn es also möglich wäre, a Long
oder Integer
(es ist nicht so, sie sind ohne die Verwendung von JNI-Code unveränderlich), es gäbe einen weiteren Grund, einen über dem anderen zu verwenden.
Ein letzter Unterschied ist, dass a Long
oder Integer
könnte sein null
.
@Borealid, das ist so falsch, Java wird immer als Wert übergeben, es gibt nichts wie eine Referenzübergabe in Java.
– Diego Ramos
4. Juli 2018 um 15:03 Uhr
Äh hm? Okay, lassen Sie uns die Idee untersuchen, dass Java niemals eine Referenz übergibt. Wenn ich eine Funktion aufrufe, gebe ich ihr ein int[2], und dann innerhalb der Funktion ändere ich den Wert im ersten Element dieses Arrays, wird der Aufrufer der Funktion diese Änderung sehen? Ja? Nun, das liegt daran, dass nicht die Werte im Array an die Funktion übergeben wurden, sondern ein Verweis auf diese Werte. „Pass by Value“ bedeutet, dass die eigentlichen Daten selbst ohne Umweg kopiert werden. Wer auch immer Ihnen beigebracht hat, dass Java Pass-by-Value ist, hat Ihnen einen schlechten Dienst erwiesen.
– Borealis
4. Juli 2018 um 21:12 Uhr
@Borealid Sie sind falsch, der Wert wird geändert, weil eine neue Kopie des Verweises auf das Array erstellt wurde. Deshalb sieht jeder, der die Funktion aufruft, die Änderung, dies wird immer noch als Wert übergeben. Ich kann nicht glauben, dass Sie sagen, dass es in Java Pass by Reference gibt. Sie übergeben niemals die ursprüngliche Referenz an die Funktion.
– Diego Ramos
5. Juli 2018 um 0:06 Uhr
In einer theoretischen Welt, in der sich Java völlig anders verhielt als tatsächlich, und die Übergabe eines Objekts oder Arrays an eine Funktion zu einer völlig separaten Kopie führte (in der Änderungen innerhalb der Funktion den Aufrufern überhaupt nicht widerspiegelten), wie würden Sie dann vorgehen? die Sprache beschreiben? Denken Sie daran, dass das, worüber wir sprechen, absolut nicht das ist, was Java tatsächlich tut.
– Borealis
5. Juli 2018 um 11:19 Uhr
@DiegoRamos hat recht. Java wird immer als Wert übergeben, die Verwirrung entsteht, weil der Wert, wenn er nicht primitiv ist, eine Speicherreferenz ist, statisches Auslagern funktioniert in Java nicht, weitere Details hier: journaldev.com/3884/…
– Pantro
27. Januar 2019 um 22:17 Uhr
Es gibt ein paar Dinge, die Sie mit einem primitiven Typ nicht tun können:
null
WertObject
sSofern Sie keine davon benötigen, sollten Sie primitive Typen bevorzugen, da sie weniger Speicher benötigen.
int
wenn Zahlen gehalten werden.int
zu klein ist, verwenden Sie a long
long
ist zu klein, verwenden BigInteger
Collection
Handhabung null
…) verwenden Integer
/Long
stattdessen
Alle Іѕ Vаиітy
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
### **Long** ist ein vorzeichenbehafteter 64-Bit-Ganzzahltyp
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 gegenüber dem anderen ist der Fall von YouTube. Sie definierten zuerst den Videoansichtszähler als
int
die überlief, als ein beliebtes Video mehr als 2.147.483.647 Aufrufe erhielt. Seit einInt
Zähler kann keinen Wert über seinem Bereich hinaus speichern, YouTube hat 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, als Eine 64-Bit-Variable benötigt doppelt so viel Speicherplatz wie eine 32-Bit-Variable.
Ein int
ist eine 32-Bit-Ganzzahl; a long
ist eine 64-Bit-Ganzzahl. Welche Sie verwenden sollten, hängt davon ab, wie groß die Zahlen sind, mit denen Sie arbeiten möchten.
int
und long
sind primitive Typen, während Integer
und Long
sind Objekte. Primitive Typen sind effizienter, aber manchmal müssen Sie Objekte verwenden; Beispielsweise können die Sammlungsklassen von Java nur mit Objekten arbeiten. Wenn Sie also eine Liste mit ganzen Zahlen benötigen, müssen Sie daraus eine machen List<Integer>
zum Beispiel (Sie können nicht verwenden int
in einem List
direkt).
Glücklich
Wenn es darum geht, eine sehr lange Zahl zu verwenden, die 32 Bit überschreiten kann, um sie darzustellen, 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. Das bedeutet, dass Sie Folgendes tun können:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Das In- und Out-Boxing ermöglicht es Ihnen, ohne zusätzliche Konvertierung zwischen int und Integer zu wechseln (dasselbe gilt für Long
,Double
,Short
zu)
Sie dürfen verwenden int
die ganze Zeit, aber Integer
enthält einige Hilfsmethoden, die Ihnen helfen können, einige komplexe Operationen mit ganzen Zahlen durchzuführen (z Integer.parseInt(String)
)
a) Objektklasse „Long“ versus primitiver Typ „long“. (Zumindest in Java)
b) Es gibt unterschiedliche (auch unklare) Speichergrößen der primitiven Typen:
Java – alles klar: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C.. nur durcheinander: https://en.wikipedia.org/wiki/C_data_types
Dies beantwortet nicht die Frage, in der es um den Unterschied zwischen Long und Long usw. geht.
– GreenAsJade
14. Januar 2019 um 9:10 Uhr
Nein, es wird nicht explizit beantwortet und der Unterschied zwischen primitiven Typen und Datentypobjekten nicht explizit gesagt, in der Tat @GreenAsJade, da die obige Frage keine bestimmte Sprache angibt. Also habe ich einen Vergleich bereitgestellt – damit jeder den Unterschied überprüfen kann. (aus den harten Daten, wie bereitgestellt)
– Franta
3. September 2019 um 0:15 Uhr
Die Frage lautete Java.
– GreenAsJade
4. September 2019 um 2:00 Uhr