432 Stimmen

Wie kann ich in Java einen long in int umwandeln?

Wie kann ich in Java einen long in int umwandeln?

517voto

Frxstrem Punkte 34682

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 .

215voto

Laxman Punkte 2550
Long x = 100L;
int y = x.intValue();

73voto

mndrix Punkte 2991

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 .

68voto

Kuchi Punkte 3544

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;
}

39voto

Andrej Herich Punkte 3188

Bei Verwendung von Guava-Bibliothek gibt es Methoden Ints.checkedCast(long) y Ints.saturatedCast(long) für die Konvertierung long a int .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X