Conversión implícita y explícita de Java

curso Java

Voy a dedicar este capítulo totalmente necesario, para explicar lo que son las conversiones de datos y las diferencias entre la conversión implícita y explícita de Java.

¿Qué es la conversión de tipos de datos?


La conversión se refiere al proceso de convertir un tipo de dato a otro.

A veces, es necesario realizar estas conversiones para poder realizar una operación matemática, almacenar datos en una variable, o para que los datos sean compatibles con una función o método en particular.

En Java, las conversiones se dividen en dos tipos: conversiones implícitas y conversiones explícitas.

Conversiones implícitas en Java

Las conversiones implícitas en Java, son también conocidas como promoción de tipos, «upcasting» o conversión automática.

¿Cuándo se produce la conversión implícita en Java?

La conversión implícita se produce cuando Java convierte automáticamente un tipo de dato a otro.

En este ejemplo, la variable «numero1» es de tipo int, mientras que la variable «numero2» es de tipo «double». Al sumar estos dos valores, Java realiza una conversión implícita de tipo, convirtiendo automáticamente el valor entero en un valor de punto flotante para poder realizar la operación de suma. El resultado de la operación también es de tipo «double», ya que es el tipo de dato más grande de los operandos.

La variable «numero1» sigue siendo de tipo int incluso después de la conversión implícita. La conversión implícita solo se aplica al valor «numero1» cuando se «realiza» la operación de suma, y el resultado de la suma se convierte en «double».

int numero1 = 10;
double numero2 = 3.14;
double resultado = numero1 + numero2;
System.out.println("El resultado de la suma es: " + resultado);

Supongamos que se tienen dos variables de tipo «int», «numero1» y «numero2», y se desea calcular la suma de ambas. En este caso, como ambas variables son de tipo «int», el resultado de la operación también será de tipo «int»:

int numero1 = 10;
int numero2 = 20;
int resultado = numero1 + numero2;

Sin embargo, si se quiere almacenar el resultado de la suma en una variable de tipo «long», que tiene más capacidad que un «int», se producirá una conversión implícita de tipo, ya que Java convertirá automáticamente el resultado de la suma a un tipo de datos más grande:

int numero1 = 10;
int numero2 = 20;
long resultado = numero1 + numero2;

Java hace esto por su cuenta, siempre que no haya posibilidad de pérdida de datos, como es el caso de este ejemplo con «long».


En cambio, si lo hacemos a la inversa, podría producirse una pérdida de datos:

long numero1 = 10L;
long  numero2 = 20L;
int resultado = numero1 + numero2;

Java nos fuerza a hacer las cosas correctamente y no nos deja ejecutar el programa haciendo algo que podría ocasionar en una pérdida de datos. De modo, que nos suelta este error:

Error en la consola

java: incompatible types: possible lossy conversion from long to int

Tipos incompatibles: posible conversión con pérdida de long a int.

En el ejemplo, no se perdería nada, porque el resultado es un 30, pero las variables, ya sabéis qué están hechas para variar y podrían tener datos más grandes que lo que cabe en un «int».

En este caso, ni cabría la suma de estos dos valores en un «int»:

long numero1 = 106859769854L;
long  numero2 = 2054897L;
int resultado = numero1 + numero2;

Conversiones explícitas en Java

Es aquí, donde entran en juego las conversiones explícitas, que son un poder que nos puede llevar a perder datos por todos lados. Sin embargo, en ocasiones, serán necesarias.

Si decidimos, por el motivo que sea, que queremos guardar el valor de la suma de los dos «long» en una variable de tipo «int», se puede realizar la conversión explícita, también conocida como conversión manual, «casting» o «downcasting».

long numero1 = 106859769854L;
long  numero2 = 2054897L;
int resultado = (int) (numero1 + numero2);
System.out.print(resultado);

Aquí, podrías esperar un valor cortado, pero positivo. Sin embargo, nos da uno negativo:

Resultado en la consola

-512357649

Desbordamiento u overflow en Java

Esto que está ocurriendo, se conoce como desbordamiento u overflow en Java. Sucede cuando el resultado de una operación es tan grande que no cabe en la representación de datos que se está utilizando.

La forma en que Java hace esto, se llama «complemento a dos». Básicamente, cambia todos los 1s y 0s (valores binarios) en el número para hacerlo más pequeño. Pero a veces, cuando el número original es muy grande, el cambio hace que el número resultante sea negativo y otras veces, positivo. Es bastante aleatorio para los humanos por así decirlo, pero realmente, es predecible, sigue un patrón.

Por ejemplo, si caben los valores en el «int», no se produce el desbordamiento y sale el número correctamente:

long numero1 = 10L;
long  numero2 = 20L;
int resultado = (int) (numero1 + numero2);
System.out.print(resultado);

Resultado en la consola

30

Más adelante, veremos como manejar este tipo de «bugs», para que dejen de serlo.

No te pierdas nada del curso Máster en Java.


Conversión implícita y explícita de Java

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba