Dies ist die beste Antwort, da NULL-Werte verarbeitet werden.
Viacheslav Dobromyslov
3
@ViacheslavDobromyslov Die Frage betraf lange Werte, nicht Nullwerte. Und ich persönlich glaube daran, null im Voraus abzulehnen, anstatt null in -> null out zu verwenden und dadurch null durch meine Anwendung zu transportieren. Man könnte also auch argumentieren, dass dies die schlechteste Antwort ist :-)
Sean Patrick Floyd
1
Warum würdest du zweimal wirken, wenn du intValuestattdessen einfach anrufen kannst ? Außerdem wird es zu lange entpackt Integer, in int umgewandelt und in neu verpackt , was nicht sehr nützlich zu sein scheint. Ich sehe den Punkt nicht auf meinem Kopf. Hast du einen guten Grund dafür?
Dici
Ich erhalte die Fehlermeldung: IntValue () kann für den primitiven Typ nicht lange aufgerufen werden
Anand
1
@Thilo oh, ich verstehe. Grundsätzlich sind die Umwandlung Sie Longauf den longersten und dann aufint
MRID
123
Hier sind drei Möglichkeiten, dies zu tun:
Long l =123L;Integer correctButComplicated =Integer.valueOf(l.intValue());Integer withBoxing = l.intValue();Integer terrible =(int)(long) l;
Alle drei Versionen generieren nahezu identischen Bytecode:
Kleinere stilistische Probleme: Zur besseren 123LLesbarkeit sollten Sie wahrscheinlich das Suffix in Großbuchstaben verwenden .
Joey
Oder Sie können eine gute Schriftart verwenden ... und jetzt geht es wieder los ...: D (nur j / k, das mache ich auch)
davidcsb
@ViacheslavDobromyslov wahr. Die Frage war über Long, nicht null
Sean Patrick Floyd
2
@ SeanPatrickFloyd yep. Vergessen Sie nicht, dass der Wert der Variablen Long manchmal NULL sein kann.
Viacheslav Dobromyslov
2
@ user64141 Typumwandlung in Java ist ein kompliziertes Problem. Das Casting von Objekten ist in Ordnung, da Sie eigentlich nichts ändern, sondern nur dasselbe Objekt auf andere Weise betrachten. In diesem Fall haben Sie jedoch eine Reihe bedeutungsvoller Besetzungen, von Objekt zu Primitiv und dann durch den Wahnsinn des Autoboxing erneut zu Objekt, obwohl die Syntax darauf hindeutet, dass es sich um ein anderes Primitiv handelt. Für mich ist dies ein Missbrauch sowohl des Boxens als auch der primitiven Bekehrung. Nicht alles, was getan werden kann, sollte getan werden.
publicstaticint safeLongToInt(long longNumber ){if( longNumber <Integer.MIN_VALUE || longNumber >Integer.MAX_VALUE ){thrownewIllegalArgumentException( longNumber +" cannot be cast to int without changing its value.");}return(int) longNumber;}
Es funktioniert zum Beispiel, wenn Sie ein Objekt erhalten, das eine Ganzzahl oder eine Länge sein kann. Ich weiß, dass das hässlich ist, aber es passiert ...
Die Verwendung von toIntExact (langer Wert) gibt den Wert des langen Arguments zurück und löst eine Ausnahme aus, wenn der Wert ein int überschreitet. Es funktioniert nur mit API-Level 24 oder höher.
In Java 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 können, einen anderen Typ umgekehrt.
Long l =1234567L;int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l,Integer.class);
Antworten:
oder wenn Sie sich keine Sorgen um null machen müssen:
In beiden Situationen kann es zu Überläufen kommen (da ein Long einen größeren Bereich als eine Ganzzahl speichern kann).
Java 8 verfügt über eine Hilfsmethode, die auf Überlauf prüft (in diesem Fall erhalten Sie eine Ausnahme):
quelle
intValue
stattdessen einfach anrufen kannst ? Außerdem wird es zu lange entpacktInteger
, in int umgewandelt und in neu verpackt , was nicht sehr nützlich zu sein scheint. Ich sehe den Punkt nicht auf meinem Kopf. Hast du einen guten Grund dafür?Long
auf denlong
ersten und dann aufint
Hier sind drei Möglichkeiten, dies zu tun:
Alle drei Versionen generieren nahezu identischen Bytecode:
quelle
123L
Lesbarkeit sollten Sie wahrscheinlich das Suffix in Großbuchstaben verwenden .Für Nicht-Null-Werte:
quelle
Wenn Sie nach Überläufen suchen und Guave zur Hand haben möchten , gibt es
Ints.checkedCast()
:Die Implementierung ist denkbar einfach und löst beim Überlauf eine IllegalArgumentException aus:
quelle
Sie müssen cast it eingeben.
Denken Sie daran, dass ein Long eine größere Reichweite als ein Int hat, sodass Sie möglicherweise Daten verlieren.
Wenn Sie über die Box-Typen sprechen, lesen Sie die Dokumentation .
quelle
Wenn Sie Java 8 verwenden, gehen Sie wie folgt vor
quelle
Der einfachste Weg, dies zu tun, ist:
quelle
In Java 8 können Sie verwenden
toIntExact
. Wenn Sie mitnull
Werten umgehen möchten , verwenden Sie:Das Gute an dieser Methode ist, dass sie ein
ArithmeticException
if auslöst, wenn das Argument (long
) überläuftint
.quelle
Angenommen, nicht null longVal
Es funktioniert zum Beispiel, wenn Sie ein Objekt erhalten, das eine Ganzzahl oder eine Länge sein kann. Ich weiß, dass das hässlich ist, aber es passiert ...
quelle
Die Verwendung von toIntExact (langer Wert) gibt den Wert des langen Arguments zurück und löst eine Ausnahme aus, wenn der Wert ein int überschreitet. Es funktioniert nur mit API-Level 24 oder höher.
quelle
lange Besucher = 1000;
int convVisitors = (int) Besucher;
quelle
In Java 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 können, einen anderen Typ umgekehrt.
quelle