Wie kann ich in Java einen long in int umwandeln?
Antworten
Zu viele Anzeigen?Aktualisiert, in Java 8:
Math.toIntExact(value);
Ursprüngliche Antwort:
Einfaches Type Casting sollte genügen:
long l = 100000;
int i = (int) l;
Beachten Sie jedoch, dass große Zahlen (normalerweise größer als 2147483647
und kleiner als -2147483648
) einige Bits verlieren und falsch dargestellt werden.
Zum Beispiel, 2147483648
würde wie folgt dargestellt werden -2147483648
.
Für kleine Werte reicht das Gießen aus:
long l = 42;
int i = (int) l;
Allerdings ist eine long
kann mehr Informationen enthalten als ein int
zu konvertieren, daher ist es nicht möglich, eine perfekte Konvertierung von long
a int
für den allgemeinen Fall. Wenn die long
eine Zahl enthält, die kleiner oder gleich ist Integer.MAX_VALUE
können Sie es durch Gießen umwandeln, ohne dass Informationen verloren gehen.
Zum Beispiel der folgende Beispielcode:
System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );
long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);
int y = (int) x;
System.out.println("int y=" + y);
erzeugt auf meinem Rechner die folgende Ausgabe:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Beachten Sie das negative Vorzeichen bei y
. Denn x
einen um eins größeren Wert als Integer.MAX_VALUE
, int y
konnte es nicht halten. In diesem Fall hat sie sich zu den negativen Zahlen hin entwickelt.
Wenn Sie diesen Fall selbst bearbeiten wollten, könnten Sie etwa so vorgehen:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
Bei all dem wird von positiven Zahlen ausgegangen. Für negative Zahlen, verwenden Sie MIN_VALUE
代わりに MAX_VALUE
.
Seit Java 8 können Sie verwenden: Math.toIntExact(long value)
Siehe JavaDoc: Math.toIntExact
Gibt den Wert des Long-Arguments zurück; löst eine Exception aus, wenn der Wert einen int überläuft.
Quellcode von Math.toIntExact
in JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Bei Verwendung von Guava-Bibliothek gibt es Methoden Ints.checkedCast(long)
y Ints.saturatedCast(long)
für die Konvertierung long
a int
.
- See previous answers
- Weitere Antworten anzeigen