382 Stimmen

Long in Integer umwandeln

Wie konvertiert man eine Long Wert in eine Integer Wert in Java?

611voto

Thilo Punkte 248982
Integer i = theLong != null ? theLong.intValue() : null;

oder wenn Sie sich nicht um die Null kümmern müssen:

// auto-unboxing does not go from Long to int directly, so
Integer i = (int) (long) theLong;

Und in beiden Situationen kann es zu Überläufen kommen (weil ein Long einen größeren Bereich speichern kann als ein Integer).

Java 8 hat eine Hilfsmethode, die auf Überlauf prüft (in diesem Fall erhalten Sie eine Ausnahme):

Integer i = theLong == null ? null : Math.toIntExact(theLong);

134voto

Sean Patrick Floyd Punkte 283617

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 erzeugen nahezu identischen Bytecode:

 0  ldc2_w <Long 123> [17]
 3  invokestatic java.lang.Long.valueOf(long) : java.lang.Long [19]
 6  astore_1 [l]
 // first
 7  aload_1 [l]
 8  invokevirtual java.lang.Long.intValue() : int [25]
11  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
14  astore_2 [correctButComplicated]
// second
15  aload_1 [l]
16  invokevirtual java.lang.Long.intValue() : int [25]
19  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
22  astore_3 [withBoxing]
// third
23  aload_1 [l]
// here's the difference:
24  invokevirtual java.lang.Long.longValue() : long [34]
27  l2i
28  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
31  astore 4 [terrible]

61voto

amukhachov Punkte 5702

Für Nicht-Null-Werte:

Integer intValue = myLong.intValue();

20voto

Jacob Marble Punkte 26412

Wenn Sie auf Überläufe prüfen möchten und über Guave praktisch, es gibt Ints.checkedCast() :

int theInt = Ints.checkedCast(theLong);

Die Umsetzung ist ganz einfach, und wirft IllegalArgumentException bei Überlauf:

public static int checkedCast(long value) {
  int result = (int) value;
  checkArgument(result == value, "Out of range: %s", value);
  return result;
}

12voto

Dushyant Sapra Punkte 563

Wenn Sie Java 8 verwenden, gehen Sie wie folgt vor

    import static java.lang.Math.toIntExact;

    public class DateFormatSampleCode {
        public static void main(String[] args) {
            long longValue = 1223321L;
            int longTointValue = toIntExact(longValue);
            System.out.println(longTointValue);

        }
}

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