Verificar un entero contra los límites de short
En el paso anterior, vimos cómo declarar y usar variables short
dentro de su rango válido. Ahora, exploremos qué sucede cuando intentamos asignar un valor que está fuera del rango de short
a una variable short
.
Java tiene diferentes tipos de datos enteros, incluyendo byte
, short
, int
y long
, cada uno con un rango diferente. Un int
(entero) es un entero con signo de 32 bits en complemento a dos, con un rango desde -2.147.483.648 hasta 2.147.483.647. Este rango es mucho más grande que el de un short
.
Cuando intentas asignar un valor de un tipo de dato más grande (como int
) a un tipo de dato más pequeño (como short
), Java te requiere que le indiques explícitamente que eres consciente de la posible pérdida de información. Esto se llama conversión de tipo (type casting). Si no realizas la conversión, Java te dará un error de compilación para evitar la pérdida accidental de datos.
Modifiquemos nuestro programa HelloJava.java
para demostrar esto.
-
Abre el archivo HelloJava.java
en el editor WebIDE.
-
Reemplaza el código existente con lo siguiente:
public class HelloJava {
public static void main(String[] args) {
int largeInt = 40000; // This value is outside the short range
// Attempt to assign largeInt to a short variable without casting
// short myShort = largeInt; // This line will cause a compilation error
// To assign a value from a larger type, we need to cast it
short myShort = (short) largeInt;
System.out.println("Value of largeInt cast to short: " + myShort);
int anotherLargeInt = -40000; // Another value outside the short range
short anotherShort = (short) anotherLargeInt;
System.out.println("Value of anotherLargeInt cast to short: " + anotherShort);
}
}
En este código actualizado:
- Declaramos una variable
int
llamada largeInt
con el valor 40000, que es mayor que el valor máximo que un short
puede contener (32767).
- La línea comentada
short myShort = largeInt;
muestra lo que sucedería sin la conversión: un error de compilación.
- La línea
short myShort = (short) largeInt;
demuestra cómo convertir el valor int
a un short
. El (short)
antes de largeInt
es el operador de conversión.
- Hacemos lo mismo para un valor negativo
anotherLargeInt
(-40000), que es menor que el valor mínimo que un short
puede contener (-32768).
-
Guarda el archivo (Ctrl+S o Cmd+S).
-
Ahora, compila el programa modificado en la Terminal:
javac HelloJava.java
Esta vez, la compilación debe ser exitosa porque usamos la conversión de tipo.
-
Ejecuta el programa compilado:
java HelloJava
Verás una salida similar a esta:
Value of largeInt cast to short: -25536
Value of anotherLargeInt cast to short: 25536
Observa que los valores de salida (-25536 y 25536) no son los valores originales (40000 y -40000). Esto se debe a que cuando conviertes un valor que está fuera del rango del tipo de dato de destino, el valor "da la vuelta". Este es un ejemplo de overflow (para valores positivos que exceden el máximo) y underflow (para valores negativos que exceden el mínimo). El valor resultante exacto depende de cómo se representan los números en binario. Esto demuestra por qué es importante entender los rangos de los tipos de datos y usar la conversión de tipo con cuidado para evitar resultados inesperados.