Antworten:
Aktualisiert in Java 8:
Math.toIntExact(value);
Ursprüngliche Antwort:
Einfaches Typgießen sollte es tun:
long l = 100000;
int i = (int) l;
Beachten Sie jedoch, dass große Zahlen (normalerweise größer als 2147483647und kleiner als -2147483648) einige der Bits verlieren und falsch dargestellt werden.
Zum Beispiel 2147483648würde dargestellt als -2147483648.
Long x = 100L;
int y = x.intValue();
intValue()hier im Hintergrund geschieht, den Wert wirft. Richtig?
long. Es ist der Referenztyp, Longder nicht direkt in ein Primitiv umgewandelt werden kann int. int y = (int)x;wird eine Ausführung auslösen, int y = (int)(long)xwird aber funktionieren. (Der Grund ist Autoboxing)
Für kleine Werte reicht das Gießen aus:
long l = 42;
int i = (int) l;
A longkann jedoch mehr Informationen enthalten als a int, so dass es im allgemeinen Fall nicht möglich ist, perfekt von longzu konvertieren int. Wenn der longWert eine Zahl kleiner oder gleich enthält, können Integer.MAX_VALUESie ihn durch Casting konvertieren, ohne Informationen zu verlieren.
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 die folgende Ausgabe auf meinem Computer:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Beachten Sie das negative Vorzeichen y. Da xein Wert größer als Integer.MAX_VALUE war, int ykonnte er nicht gehalten werden. In diesem Fall wurde es um die negativen Zahlen gewickelt.
Wenn Sie diesen Fall selbst behandeln möchten, können Sie Folgendes tun:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
All dies setzt positive Zahlen voraus. Verwenden Sie für negative Zahlen MIN_VALUEanstelle von "MAX_VALUE"
Seit Java 8 können Sie Folgendes verwenden: Math.toIntExact (langer Wert)
Siehe JavaDoc: Math.toIntExact
Gibt den Wert des langen Arguments zurück. Auslösen einer Ausnahme, wenn der Wert ein int überschreitet.
Quellcode von Math.toIntExactin JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Wenn Sie die Guava-Bibliothek verwenden , gibt es Methoden Ints.checkedCast(long)und Ints.saturatedCast(long)zum Konvertieren longin int.
long x = 3;
int y = (int) x;
aber das setzt voraus, dass das longals dargestellt intwerden kann, kennen sie den unterschied zwischen den beiden?
Sie können den LongWrapper anstelle von longprimitiv und call verwenden
Long.intValue()
Der longWert wird entsprechend gerundet / abgeschnitten , um in eine zu passen int.
Wenn das direkte Casting einen Fehler anzeigt, können Sie dies folgendermaßen tun:
Long id = 100;
int int_id = (int) (id % 100000);
In Java ist ein Long eine vorzeichenbehaftete 64-Bit-Zahl, dh Sie können Zahlen zwischen -9.223.372.036.854.775.808 und 9.223.372.036.854.775.807 (einschließlich) speichern.
Ein int ist dagegen mit einer 32-Bit-Nummer signiert, was bedeutet, dass Sie eine Nummer zwischen -2.147.483.648 und 2.147.483.647 (einschließlich) speichern können.
Wenn Ihr Long also außerhalb der für ein Int zulässigen Werte liegt, erhalten Sie keine wertvolle Konvertierung.
Details zur Größe primitiver Java-Typen finden Sie hier:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
In Java 8 mache ich folgendes
long l = 100L;
int i = Math.toIntExact(l);
Diese Methode löst aus, ArithmaticExceptionwenn der longWert den Bereich von überschreitet int. Somit bin ich vor Datenverlust sicher.
Wenn Sie eine sichere Konvertierung durchführen und die Verwendung von Java8 mit Lambda-Ausdruck genießen möchten, können Sie es wie folgt verwenden:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =?
lang x = 3120L; // nimm einen beliebigen langen Wert int z = x.intValue (); // Sie können double auch auf die gleiche Weise in int konvertieren
wenn Sie dann direkt verdecken müssen
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
Im Frühjahr gibt es eine strenge Möglichkeit, ein Long in Int umzuwandeln
Nicht nur lnog kann in int konvertieren, jeder Klassentyp erweitert Number kann generell in einen anderen Number-Typ konvertiert werden. Hier zeige ich Ihnen, wie Sie einen Long in int konvertieren, einen anderen Typ umgekehrt.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
