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 2147483647
und kleiner als -2147483648
) einige der Bits verlieren und falsch dargestellt werden.
Zum Beispiel 2147483648
wü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, Long
der nicht direkt in ein Primitiv umgewandelt werden kann int
. int y = (int)x;
wird eine Ausführung auslösen, int y = (int)(long)x
wird aber funktionieren. (Der Grund ist Autoboxing)
Für kleine Werte reicht das Gießen aus:
long l = 42;
int i = (int) l;
A long
kann jedoch mehr Informationen enthalten als a int
, so dass es im allgemeinen Fall nicht möglich ist, perfekt von long
zu konvertieren int
. Wenn der long
Wert eine Zahl kleiner oder gleich enthält, können Integer.MAX_VALUE
Sie 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 x
ein Wert größer als Integer.MAX_VALUE war, int y
konnte 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_VALUE
anstelle 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.toIntExact
in 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 long
in int
.
long x = 3;
int y = (int) x;
aber das setzt voraus, dass das long
als dargestellt int
werden kann, kennen sie den unterschied zwischen den beiden?
Sie können den Long
Wrapper anstelle von long
primitiv und call verwenden
Long.intValue()
Der long
Wert 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, ArithmaticException
wenn der long
Wert 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);