definicion java

java - definicion - Convertir largo en entero



jlabel definicion (12)

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 código byte 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]

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


El uso de toIntExact (valor largo) devuelve el valor del argumento largo, lanzando una excepción si el valor se desborda en un int. Solo funcionará API nivel 24 o superior.

int id = Math.toIntExact(longId);


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

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

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


En java, hay una forma rigurosa de convertir un largo a int.

no solo lnog puede convertir en int, cualquier tipo de clase se extiende. Number puede convertir a otro tipo de Number en general, aquí le mostraré cómo convertir un largo en int, otro tipo viceversa.

Long l = 1234567L; int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);


La mejor manera simple de hacerlo es:

public static int safeLongToInt( long longNumber ) { if ( longNumber < Integer.MIN_VALUE || longNumber > Integer.MAX_VALUE ) { throw new IllegalArgumentException( longNumber + " cannot be cast to int without changing its value." ); } return (int) longNumber; }


Si está utilizando Java 8, haga lo siguiente.

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


Si le interesa revisar los desbordamientos y tener a la mano Guava , hay Ints.checkedCast() :

int theInt = Ints.checkedCast(theLong);

La implementación es muy simple y lanza IllegalArgumentException en el desbordamiento:

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


Suponiendo que no sea nulo longVal

Integer intVal = ((Number)longVal).intValue();

Funciona, por ejemplo, y obtienes un objeto que puede ser un entero o un largo. Sé que eso es feo, pero sucede ...


Tendrás que teclearlo.

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

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

Si está hablando de los tipos en caja, lea la documentation .


visitantes largos = 1000;

int convVisitors = (int) visitantes;


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

o si no necesitas preocuparte por null:

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

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


Integer intValue = myLong.intValue();