Convertir largo en entero

4 minutos de lectura

avatar de usuario
Srinivasan

Cómo convertir un Long valor en un Integer valor en Java?

  • primero debe verificar si Long no excede Integer MaxValue.

    – Lukasz

    27 de abril de 2011 a las 12:26

  • Java 8: stackoverflow.com/a/36331461/2291056

    – Kuchi

    31/03/2016 a las 11:00

  • Posible duplicado de ¿Cómo puedo convertir un largo a int en Java?

    – Alex K.

    16 oct 2018 a las 19:14

avatar de usuario
tilo

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

o si no necesita preocuparse por nulo:

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

Y en ambas situaciones, es posible que se encuentre con desbordamientos (porque Long puede almacenar un rango más amplio que Integer).

Java 8 tiene un método auxiliar que verifica el desbordamiento (obtiene una excepción en ese caso):

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

  • Es la mejor respuesta porque maneja valores NULL.

    – Viacheslav Dobromyslov

    6 de abril de 2014 a las 1:05

  • @ViacheslavDobromyslov la pregunta era sobre valores largos, no sobre valores nulos. Y personalmente, creo en rechazar null por adelantado en lugar de usar null in -> null out y, por lo tanto, transportar null a través de mi aplicación. Así que también se podría argumentar que esta es la peor respuesta 🙂

    – Sean Patrick Floyd

    11 de junio de 2015 a las 15:46

  • ¿Por qué lanzarías dos veces cuando solo puedes llamar? intValue en cambio ? Además, se desempacará en largo, se transmitirá en int y se volverá a empaquetar en Integer, que no parece muy útil. No veo el punto en la parte superior de mi cabeza, ¿tienes una buena razón para esto?

    – Dici

    14 de julio de 2016 a las 0:09


  • Recibo el error: No se puede invocar intValue() en el tipo primitivo largo

    – Anand

    22 de julio de 2016 a las 8:29

  • @Thilo oh, lo entiendo. Básicamente estás convirtiendo Long a long primero, y luego a int

    – mrid

    22 de abril de 2019 a las 3:02


avatar de usuario
sean patrick floyd

Aquí hay tres formas de hacerlo:

Long l = 123L;
Integer correctButComplicated = Integer.valueOf(l.intValue());
Integer withBoxing = l.intValue();
Integer terrible = (int) (long) l;

Las tres versiones generan un código de bytes casi idéntico:

 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]

  • Problema de estilo menor: probablemente debería usar el sufijo en mayúsculas 123L para la legibilidad.

    – joey

    12 de julio de 2012 a las 12:48

  • O puedes usar una buena fuente… y aquí vamos de nuevo… 😀 (solo j/k, también hago eso)

    – davidcesarino

    31 de marzo de 2013 a las 22:22


  • @ViacheslavDobromyslov cierto. la pregunta era sobre Long, no null

    – Sean Patrick Floyd

    10 de marzo de 2014 a las 8:51

  • @SeanPatrickFloyd sí. No olvide que el valor de la variable Long podría ser NULL a veces.

    – Viacheslav Dobromyslov

    11 de marzo de 2014 a las 13:29

  • @ user64141 La conversión de tipos en Java es un problema complicado. Casting Objects está bien, porque en realidad no estás cambiando nada, solo mirando el mismo objeto de una manera diferente. Pero en este caso, tienes una cadena de conversiones significativas, de Object a primitivo y luego, a través de la locura del autoboxing, a object nuevamente, aunque la sintaxis sugiere que es otro primitivo. Para mí, esto es un mal uso tanto del boxeo como de la conversión primitiva. No todo lo que se puede hacer se debe hacer.

    – Sean Patrick Floyd

    12 de junio de 2015 a las 6:55

avatar de usuario
amukhachov

Para valores no nulos:

Integer intValue = myLong.intValue();

  • Se ve mucho más limpio que (int) (largo) imo.

    – Gaʀʀʏ

    10 de diciembre de 2013 a las 20:41

  • Uso Long.valueOf(LONG_VARIABLE_HERE).intValue()

    – Francisco Rodrigues

    28 de febrero de 2017 a las 20:45

  • Esto reduce las conversiones primitivas de largo a int (es decir, posible pérdida de información ya que habrá que descartar algunos bytes)

    – Siddhartha

    18 de febrero de 2021 a las 21:42

avatar de usuario
jacob mármol

Si desea comprobar si hay desbordamientos y tiene Guayaba útil, hay Ints.checkedCast():

int theInt = Ints.checkedCast(theLong);

La implementación es muy simple, y lanza Argumento de excepción ilegal en desbordamiento:

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

Si está utilizando Java 8, hágalo de la siguiente manera

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

        }
}

En Java 8 puedes usar Math.toIntExact. Si quieres manejar null valores, utilice:

Integer intVal = longVal == null ? null : Math.toIntExact(longVal);

Lo bueno de este método es que arroja un ArithmeticException si el argumento (long) desborda un int.

avatar de usuario
jeff fomentar

Tendrás que escribirlo.

long i = 100L;
int k = (int) i;

Tenga en cuenta que long tiene un rango mayor que int, por lo que podría perder datos.

Si está hablando de los tipos en caja, lea el documentación.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad