CodeGym /Java-Blog /Random-DE /So konvertieren Sie long in int in Java
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

So konvertieren Sie long in int in Java

Veröffentlicht in der Gruppe Random-DE
In diesem Artikel erklären wir, wie man in Java long in int konvertiert , und schreiben einige Codebeispiele. Da long ein größerer Datentyp als int ist , sollten wir hier für eine solche Konvertierung die Typumwandlung verwenden. Wie Sie wahrscheinlich bereits wissen, sind long und int in Java primitive Datentypen. Das heißt, sie sind keine Klassenobjekte. Alle Objekte und Arrays werden im Heap-Speicherplatz gespeichert, während primitive Typen wie int und long im Stapelspeicher gespeichert werden. Long und int sind etwas ähnlich. Ganzzahl bedeutet ganze Zahl, die positiv, negativ oder Null sein kann. Beide langund int sind Ganzzahltypen, daher sind sie in gewisser Weise kompatibel. Das Problem besteht darin, dass der Long- Typ im Bereich von -263 bis 263 – 1 oder -9223372036854775808 bis 9223372036854775807 liegt. Das heißt, das Java-Programm reserviert 64 Bit für einen Long- Typ. Gleichzeitig belegt der Typ int 32 Bits, in die Sie Zahlen von -231 bis 231 - 1 oder, was dasselbe ist, von -2147483648 bis 2147483647 eingeben können. Dies bedeutet, dass jede beliebige Anzahl vom Typ int problemlos in a passen kann langer Typ. Wenn in Java mit Grundelementen gearbeitet wird, erfolgt die Konvertierung von einem engeren Typ in einen breiteren Typ automatisch. Auf andere Weise wird es Verbreiterung genannt.

int myInt= 18;
long myLong= 16000;
       myLong = myInt;
Hier weisen wir einer Long- Variablen ein int zu . Alles lief reibungslos, in einen größeren Bereich passt ein kleinerer ruhig und wir verlieren nichts außer Speicherplatz. Übrigens: Wenn wir eine Variable vom Typ long deklarieren und ihren Wert definieren, ist es besser, ihr den Buchstaben l zuzuweisen . Dies ist praktisch, wenn wir mit Zahlen außerhalb des int- Bereichs arbeiten.

long myVeryLong = 10000000000l;

Konvertierung von Java long in int

Kommen wir nun zurück zur Hauptaufgabe dieses Artikels – der Konvertierung von Java long in int . Das Problem ist, dass etwas Größeres nicht immer in etwas Kleineres passt. Hier können wir in Java also nicht einfach automatisch „kleiner“ in „größer“ umwandeln. Wenn wir versuchen, wie im vorherigen Beispiel vorzugehen, aber umgekehrt:

//example without typecasting…nice trying! 
public static void main(String[] args) {

int myInt= 18;
long myLong= 16000;
       myInt = myLong;
}
Der Java-Compiler lässt uns das einfach nicht zu und gibt einen Fehler aus. Für diesen Vorgang müssen wir also das sogenannte Typecasting verwenden. Dieser Vorgang wird als einschränkende Typkonvertierung bezeichnet. Um eine Variable einzugrenzen, müssen Sie explizit den Typ angeben, in den Sie Ihren Wert umwandeln möchten. Hier ist ein Beispiel, in dem wir versuchen werden, eine „kleine“ lange Zahl in int (die hineinpassen sollte) und zwei „große“ lange Zahlen, die außerhalb des int- Bereichs liegen, einzufügen.

public class longToInt {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long myVeryLong = 2147483648l;//l in the end means ‘long’ 
       long myVeryLong = 10000000000l;

       myInt = (int) myLong;
       System.out.println(myInt);
       myInt = (int) oneMoreLong;
       System.out.println(myInt);
       myInt = (int) myVeryLong;
       System.out.println(myInt);
   }
}
Wir haben dem Compiler mitgeteilt, dass wir den Long- Wert in eine Int- Variable einfügen möchten und sind für die Konsequenzen dieser Entscheidung verantwortlich. Wenn der Compiler einen expliziten Hinweis auf einen engeren Typ erkennt, führt er die Konvertierung durch. Als Ergebnis erhalten wir die Ausgabe:
16000 -2147483648 1410065408
Nun, 16000 ist definitiv das, was wir erwartet haben, aber warum ist Minus in -2147483648? Und was bedeutet diese 1410065408? Tatsache ist, dass solche Zahlen in einer langen Variablen gespeichert wurden, die, wie wir uns erinnern, 64 Bit benötigt. Wir versuchen, diese Zahlen in eine int- Variable einzufügen, die nur 32 Bit speichern kann. In der Regel enthalten diese 32 Zellen Nullen und Einsen aus den ersten 32 Bits der langen Zahl, der Rest wird einfach verworfen. Wenn also die ursprüngliche Zahl nicht in 32 Bit passt, werden die nicht passenden Bits einfach verworfen. Deshalb haben wir nur die korrekte Zahl 16000, da diese weniger als 32 Bit beansprucht.

Konvertierung von Java 8 long in int

In Java 8 verfügt die Math- Klasse über eine neue Methode, die long in int konvertiert . Hier ist es:

Math.toIntExact(value);
Das Beste an dieser Methode ist, dass sie die Länge der konvertierten Zahl steuert. Wenn der Wert zu groß ist, um in ein int zu passen , wird eine Ausnahme ausgelöst. Sehen wir uns an unserem Beispiel an, wie das funktioniert:

public class intToLong {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long oneMoreLong = 2147483648l;
       long myVeryLong = 10000000000l;
      
       System.out.println(Math.toIntExact(myLong));
       int y = Math.toIntExact(oneMoreLong);
       System.out.println(oneMoreLong);
       System.out.println(Math.toIntExact(myVeryLong));
   }
}
Die Ausgabe ist:
16000 Ausnahme im Thread „main“ java.lang.ArithmeticException: Ganzzahlüberlauf bei java.base/java.lang.Math.toIntExact(Math.java:1080) bei intToLong.main(intToLong.java:13)
Daher gab das Programm die einzige korrekt konvertierte Zahl 16000 aus, und als dann versucht wurde, die außerhalb des gültigen Bereichs liegende Zahl 2147483648l in int zu übertragen , löste die Methode eine Ausnahme aus. Wir haben also nicht das Problem verworfener Bits, wie im Fall der klassischen Java- Konvertierung von Long nach Int .
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION