Convertir long a int en Java
En esta entrada de refactorizando vamos a ver diferentes aproximaciones para convertir long a int en Java.
En Java los valores «long» se representan mediante números enteros de 64 bits con signo. Por otro lado, los valores «int» se representan mediante números enteros de 32 bits con signo.
Podemos realizar conversiones de un tipo de dato superior a uno inferior, pero perderíamos algún bit, siempre que el long sea mayor que el máximo o mínimo de Integer. Estas conversiones se llaman casting de tipo estrecho o narrowing.
Por lo tanto, convertir un tipo de dato superior a uno inferior se denomina «casting de tipo estrecho» o «narrowing». Como resultado de estas conversiones, algunos bits se perderían cuando los valores «long» son mayores que «Integer.MAX_VALUE» y «Integer.MIN_VALUE».
Para convertir de long a int en Java podemos hacer uso de un tipo de casting (typecasting).
Vamos a ver como podemos convertir de long a int.
Como convertir de long a int en Java
Convertir de long a int con Cast
La primera aproximación para convertir de long a int en Java sería haciendo cast. Vamos a ver un ejemplo:
int longToInt = (int) longNumber
Convertir de long a int con Java desde versión 8
Para evitar los problemas de desbordamiento al convertir un long a int podemos hacer uso de la función introducida en Java 8, Math.
int longToInt = Math.toIntExact(theLong);
Utilizar Guava
En este caso vamos a utilizar la librería Guava de Google para realizar la conversión de long a int en Java:
public int longToIntWithGuavaCheckedCast(long number) { return Ints.checkedCast(number); } //o también public int longToIntGuavaWithSaturatedCast(long number) { return Ints.saturatedCast(number); }
Utilizar Long.valueOf para convertir de long a int
Otra manera directa haciendo uso de las funciones que nos da Java es hacer uso de Long.valueOf(valor).
La clase Long nos permite hacer un wraper de un valor de long de tipo primitivo.
int longToInt = Long.valueOf(number).intValue();
Consideraciones al convertir de long a int
Cuando convertimos de long a int hay que tener en cuenta el número que queremos convertir, es decir, que no sea superior o inferior al tamaño que un int puede admitir.
Para aquellos casos en los que utilicemos Guava o usemos la función Math de Java 8 obtendremos una excepción:
- Si hacemos uso de Guava e intentamos convertir un número mayor a Integer.MAX_VALUE o Integer.MIN_VALUE obtendremos una excepción de tipo IllegalArgumentException.
- Al hacer uso de Math e intentar convertir un long que supere por arriba o por abajo el valor máximo de un Integer tendremos una excepción de ArithmeticException.
En cambio si utilizamos Long.valueOf o cast el valor devuelto podrá variar:
- Si el número es superior de Integer.MAX_VALUE al intentar convertirlo obtendremos un número negativo.
- Por otro lado, si el número es inferior a Integer.MIN_VALUE al intentar convertirlo obtendremos un número positivo.
Conclusión
En esta entrada hemos visto diferentes aproximaciones para convertir números de long a int en Java. Habrá que tener en cuenta el método empleado para evitar problemas de desbordamiento o excepciones.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!