Las variables en Java son elementos clave para poder manejar los datos que toda aplicación utiliza. Son un espacio de memoria en el que guardamos un determinado valor o dato durante la programación. En cualquier lenguaje de programación como C, PHP o Python, las variables se utilizan para almacenar datos en tiempo de ejecución de un programa. Java es un lenguaje de tipado estático, lo que significa que el tipo de dato se asignará a la hora de definir la variable. Es necesario declarar variables en Java para poder utilizarlas.
Tipos de Datos Numéricos Enteros en Java
Las variables numéricas se utilizan para operar con distintos tipos de datos numéricos. Dependiendo de los números con los que se trabaja es importante asignar su correspondiente tipo de variable numérica, para así ahorrar recursos (memoria asignada para la variable). Como probablemente ya sepa, tanto long como int en Java son tipos de datos primitivos, lo que significa que no son objetos de clase. Todos los objetos y matrices se almacenan en Heap Space, mientras que los tipos primitivos, como int y long, se almacenan en la memoria de pila. Entero significa número entero, que puede ser positivo, negativo o cero. Ambos long e int son tipos enteros, por lo que son compatibles en cierto modo.
Rangos y Tamaños de los Tipos de Datos Enteros
Es fundamental conocer el tamaño en bits y el rango de valores que cada tipo de dato puede almacenar para una correcta gestión de la memoria y evitar errores. Los principales tipos de datos enteros en Java son:
- byte: ocupa 8 bits y puede almacenar números desde -27 (-128) hasta 27 - 1 (127).
- short: ocupa 16 bits y puede almacenar números desde -215 (-32,768) hasta 215 - 1 (32,767).
- int: ocupa 32 bits, en los que puedes poner números desde -231 hasta 231 - 1, o, lo que es lo mismo, desde -2,147,483,648 hasta 2,147,483,647.
- long: ocupa 64 bits, y su rango va de -263 a 263 - 1, o -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807.
Esto significa que cualquier número de tipo int puede caber fácilmente en un tipo long.
Declaración de Variables long en Java
Conociendo ya los tipos de variables básicas y cómo nombrarlas, veamos ahora cómo declararlas. La declaración de una variable en Java se compone de los siguientes elementos:
Lea también: IVA 21% Excel
- Tipo de variable.
- Nombre de variable.
- Signo “=”.
- Valor de la variable.
- Signo “;”.
Por ejemplo, para guardar la edad que un programa solicita al usuario, se utiliza una variable de tipo integer (entero) en Java. Para declarar una variable de tipo long en Java, la sintaxis es sencilla:
long miNumeroGrande;
Este tipo de escritura nos permite declarar e inicializar la variable con un valor en una sola línea. Por ejemplo:
long idUnico = 9876543210987L;
Por cierto, cuando declaramos una variable de tipo long y definimos su valor, es mejor asignarle la letra L (mayúscula o minúscula, aunque se prefiere la mayúscula para evitar confusiones con el número uno), esto nos vendrá bien cuando trabajemos con números fuera del rango int.
Conversión de Datos: long a int en Java
En este artículo, explicaremos cómo convertir long a int en Java y escribiremos algunos ejemplos de código. Dado que long es un tipo de datos más grande que int, para esta conversión se deberá usar la conversión de tipos o type casting.
Conversión Automática (Widening Casting): De int a long
En Java, cuando se trabaja con primitivas, la conversión de un tipo más estrecho a un tipo más ancho es automática. De otra manera, se llama ensanchamiento. Aquí estamos asignando un int a una variable larga. Todo transcurrió sin problemas, en un rango más grande, uno más pequeño cabe tranquilo y no perdemos nada excepto espacio de memoria.
Lea también: Guía IVA reducido
int valorEntero = 500;long valorLargo = valorEntero; // Conversión automática y seguraSystem.out.println(valorLargo); // Salida: 500
Conversión Explícita (Narrowing Casting): De long a int
Ahora volvamos a la tarea principal de este artículo: la conversión de Java largo a int. El problema es que algo más grande no siempre encaja en algo más pequeño. Así que aquí no podemos simplemente poner "más pequeño" en "más grande" automáticamente en Java. El compilador de Java simplemente no nos permitirá hacer esto y arrojará un error si intentamos una asignación directa.
Entonces, para esta operación, necesitamos usar lo que se llama encasillamiento o type casting explícito. Este proceso se denomina conversión de tipo de estrechamiento. Para restringir una variable, debe especificar explícitamente el tipo al que desea convertir su valor. Hemos notificado al compilador que queremos poner el valor largo en una variable int y somos responsables de las consecuencias de esta decisión. El compilador, al ver una indicación explícita de un tipo más estrecho, realiza la conversión.
long numeroLong = 16000L;int numeroInt = (int) numeroLong; // Conversión explícitaSystem.out.println(numeroInt); // Salida: 16000
Posible Pérdida de Datos en la Conversión de Estrechamiento
La conversión explícita de long a int puede resultar en pérdida de datos o valores inesperados si el valor original de long está fuera del rango de int. El hecho es que tales números se almacenaron en una variable larga que, como recordamos, ocupa 64 bits. Estamos tratando de poner estos números en una variable int que solo puede almacenar 32 bits. Como regla general, estas 32 celdas contendrán ceros y unos de los primeros 32 bits del número long, y el resto simplemente se descartará. Por lo tanto, si el número original no cabe en 32 bits, los bits que no encajan simplemente se descartan. Por eso solo tenemos el número correcto 16000, ya que ocupa menos de 32 bits.
Consideremos el siguiente ejemplo que demuestra la pérdida de datos:
long valorExcedido = 2147483648L; // Este es 2^31, justo fuera del rango int positivoint resultadoConPerdida = (int) valorExcedido;System.out.println(resultadoConPerdida); // Salida: -2147483648 (valor incorrecto debido al desbordamiento)
Conversión Segura con Math.toIntExact() en Java 8
En Java 8, la clase Math tiene un nuevo método, toIntExact(), que convertirá long a int de manera segura. Lo mejor de este método es que controla la longitud del número convertido y, si el valor es demasiado grande para caber en un int, generará una excepción ArithmeticException. Esto evita la pérdida silenciosa de datos y permite un manejo de errores robusto.
Lea también: ¿Cómo localizar tus XML del SAT?
long numeroValido = 16000L;long numeroMuyGrande = 3000000000L; // Excede el rango de inttry { int convertido = Math.toIntExact(numeroValido); System.out.println("Número válido convertido: " + convertido); // Salida: 16000} catch (ArithmeticException e) { System.out.println("Error al convertir número válido: " + e.getMessage());}try { int convertidoGrande = Math.toIntExact(numeroMuyGrande); System.out.println("Número muy grande convertido: " + convertidoGrande);} catch (ArithmeticException e) { // Aquí se lanzará la excepción, ya que el valor excede el rango int System.out.println("Error al convertir número muy grande: " + e.getMessage()); // Salida: integer overflow}Por lo tanto, el programa imprimió el único número convertido correctamente, 16000, y luego, al intentar insertar el número fuera de rango 2147483648l en int, el método generó una excepción.
Convenciones de Nomenclatura para Variables en Java
Cuando vayamos a dar un nombre a una variable deberemos de tener en cuenta una serie de normas. Los identificadores son secuencias de texto unicode, sensibles a mayúsculas cuya primer carácter solo puede ser una letra, número, símbolo dólar $ o subrayado _ .
Es recomendable que los nombres de los identificadores sean legibles y no acrónimos que no podamos leer. De tal manera que a la hora de verlos se auto-documenten por sí mismos. Las convenciones de nomenclatura en Java son:
- Para nombres de variables, los identificadores siempre se escriben en minúsculas (pe. nombre).
- Si son dos o más palabras, el inicio de cada siguiente palabra se escriba en mayúsculas (pe. nombreVariable).
- Si el identificador implica que sea una constante, es decir, que hayamos utilizado los modificadores final static, dicho nombre se suele escribir en mayúsculas (pe. LETRA).
- Y si la constante está compuesta de dos palabras, estas se separan con un subrayado (pe. NUMERO_MAXIMO).
