Long vs. Integer, long vs. int, was und wann verwenden?

Lesezeit: 6 Minuten

Benutzer-Avatar
Ich weiß, wie man das V ankreuzt

Manchmal sehe ich die Verwendung von APIs long oder Long oder int oder Integerund ich kann mir nicht vorstellen, wie die Entscheidung dafür getroffen wird?

Wann soll ich was wählen?

Benutzer-Avatar
Borealis

Long ist der Object Form von longund 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 intaußer wenn Sie geerbte Methoden verwenden müssen Objectwie zum Beispiel hashcode. Java.util.collections Methoden verwenden normalerweise das umrandete (Object-wrapped) Versionen, weil sie für alle funktionieren müssen Objectund ein primitiver Typ, wie int oder longist 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:

  • Haben eine null Wert
  • auf ihnen synchronisieren
  • Verwenden Sie sie als Typparameter für eine generische Klasse und damit zusammenhängend:
  • Übergeben Sie sie an eine API, die mit funktioniert Objects

Sofern Sie keine davon benötigen, sollten Sie primitive Typen bevorzugen, da sie weniger Speicher benötigen.

  • Verwenden Sie standardmäßig eine intwenn Zahlen gehalten werden.
  • Wenn die Reichweite von int zu klein ist, verwenden Sie a long
  • Wenn die Reichweite von long ist zu klein, verwenden BigInteger
  • Wenn Sie Ihre Zahlen als Objekt behandeln müssen (z. B. wenn Sie sie in eine CollectionHandhabung null…) verwenden Integer/Long stattdessen

Benutzer-Avatar
Alle Іѕ Vаиітy

Ganze Zahl ist ein vorzeichenbehafteter 32-Bit-Ganzzahltyp

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

### **Long** ist ein vorzeichenbehafteter 64-Bit-Ganzzahltyp

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

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 ein Int 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).

Benutzer-Avatar
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

  • Byte, Zeichen .. 1B .. 8b
  • kurz int .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • lang int .. 8B .. 64b

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

  • kurz .. .. 16b
  • int .. .. .. 16b … wtf?!?!
  • lang .. .. 32b
  • lang lang .. 64b .. durcheinander! :-/

  • 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

1346000cookie-checkLong vs. Integer, long vs. int, was und wann verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy