Saltearse al contenido

Conversión de tipos

Conversión de tipos o casting

Por otro lado, debemos tener en cuenta cual será el tipo de dato del resultado de una operación aritmética, tomando en cuenta los tipos de datos de los operandos. Esto se conoce como conversión de tipos o casting.

En muchas ocasiones, es necesario convertir un tipo de dato a otro, ya sea para realizar una operación aritmética o para asignar un valor a una variable.

En Java, existen dos tipos de conversión de tipos: conversión implícita y conversión explícita.

Conversión implícita

La conversión implícita o generalización (widening) es aquella que se realiza automáticamente por el compilador, sin necesidad de indicar que debe realizarse. Esta conversión se realiza cuando el tipo de dato de un operando es “más pequeño” que el tipo de dato del otro operando.

Por ejemplo, si queremos sumar una variable de tipo int con una variable de tipo float, el compilador realizará una conversión implícita de tipo int a tipo float. Esto se debe a que la representación de un número int es “más pequeña” que la representación de un número float, lo que podría llevar a una pérdida de precisión en la operación.

1
int num1 = 5;
2
float num2 = 5.5f;
3
float suma = num1 + num2; // 10.5

En este caso, el tipo de dato de num1 es int, mientras que el tipo de dato de num2 es float. Como el tipo de dato de num1 es “más pequeño” que el tipo de dato de num2, el compilador realiza una conversión implícita de tipo int a tipo float, y luego realiza la suma.

La siguiente secuencia muestra el orden de los tipos de datos numéricos de menor a mayor tamaño y por tanto los tipos de conversión implícita que se pueden realizar:

byteshortcharintlongfloatdouble

Conversión explícita

Por el contrario, podemos encontrarnos con casos en los que necesitemos que el resultado de una operación aritmética sea de un tipo de dato específico, distinto al tipo de dato de los operandos y sin la posibilidad de realizarse una conversión implícita. En estos casos, debemos realizar una conversión explícita o especialización (narrowing).

Por ejemplo, si nos encontramos trabajando con números de punto flotante y queremos que el resultado de una operación sea de tipo int, debemos realizar una conversión explícita de tipo float a tipo int.

Para realizar una conversión explícita, debemos indicar el tipo de dato al que queremos convertir el valor, entre paréntesis, antes del valor que queremos convertir.

1
float num1 = 5.5f;
2
float num2 = 5.5f;
3
int resultado;
4
resultado = (int) (num1 + num2); // 11

En el ejemplo anterior, el tipo de dato de num1 y num2 es float, mientras que el tipo de dato de resultado es int. Al realizar la operación de adición num1 + num2, el resultado será de tipo float (11.0f). A pesar de que la parte decimal del resultado es 0, el compilador no realiza una conversión implícita de tipo float a tipo int, por lo cual no podríamos asignarlo directamente a la variable resultado.

En este caso, debemos realizar una conversión explícita de tipo float a tipo int, para que el resultado de la operación sea de tipo int.

La siguiente secuencia muestra el orden de los tipos de datos numéricos de mayor a menor tamaño y por tanto los tipos de conversión explícita que se pueden realizar:

doublefloatlongintcharshortbyte

Por supuesto, la razón de realizar una conversión explícita es que el tipo de dato de destino no puede almacenar el valor del tipo de dato de origen. Por ejemplo, si queremos almacenar el valor 10000000000 en una variable de tipo int, no podría realizarse una conversión implícita de tipo long a tipo int, ya que el valor máximo que puede almacenar una variable de tipo int es 2147483647. Sin duda, esto nos llevaría a una pérdida de precisión.