Al desarrollar aplicaciones suele surgir la necesidad de realizar la conversión de tipos de datos como por ejemplo convertir un byte a un short, un int, un long, float o double.
Cuando se asigna valor de un tipo de datos a otro, los dos tipos de datos pueden no ser compatibles entre sí y se debe hacer un casting. Por ejemplo, podemos asignar un valor int a una variable long.
En el siguiente ejemplo se puede observar un programa donde se presenta un error debido a la existencia de una falta de compatibilidad de los tipos de datos:
// Programa Java para ilustrar tipos de datos incompatibles
// para la conversión de tipo explicita
public class Test
{
public static void main(String[] argv)
{
char ch = 'c';
int num = 88;
ch = num;
}
}
Salida:
9: error: incompatible types: possible lossy conversion from int to char
ch = num;
^
1 error
En los siguientes ejemplos se puede observar la sintaxis del código empleado para llevar a cabo el casting en diversos casos:
// Programa Java para ilustrar el tipo de conversion explicita
class Test
{
public static void main(String[] args)
{
double d = 100.04;
//casting de tipo
long l = (long)d;
//casting de tipo
int i = (int)l;
System.out.println("Valor Double "+d);
//parte fraccionaria perdida
System.out.println("Valor Long "+l);
//parte fraccionaria perdida
System.out.println("Valor Int "+i);
}
}
Salida:
Valor Double 100.04
Valor Long 100
Valor Int 100
// Programa Java para ilustrar Conversion de int y double a byte
class Test
{
public static void main(String args[])
{
byte b;
int i = 257;
double d = 323.142;
System.out.println("Conversion de int a byte.");
//i%256
b = (byte) i;
System.out.println("i = " + i + " b = " + b);
System.out.println("\nConversion de double a byte.");
//d%256
b = (byte) d;
System.out.println("d = " + d + " b= " + b);
}
}
Salida:
Conversion de int a byte.
i = 257 b = 1
Conversion de double a byte.
d = 323.142 b= 67
// Programa Java para ilustrar la promocion de Tipo en Expresiones
class Test
{
public static void main(String args[])
{
byte b = 42;
char c = 'a';
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
// La expresion
double result = (f * b) + (i / c) - (d * s);
//Resultado después de todas las 'promociones'
System.out.println("resultado = " + result);
}
}
Salida:
resultado = 626.7784146484375
Al examinar expresiones en Java, el resultado se actualiza en forma automática a un tipo de datos más grande del operando.
Pero si decidimos almacenar ese resultado en un tipo de datos más pequeño, se generará un error de tiempo de compilación, por lo que resulta necesario hacer un casting del resultado, lo que se conoce como “castear” el resultado.
A continuación se puede ver como hacer este procedimiento.
// Programa Java para ilustrar el tipo de conversion int a byte
class Test
{
public static void main(String args[])
{
byte b = 50;
//casting de tipo int a byte
//mostraría error si no detallamos (byte)
b = (byte)(b * 2);
System.out.println(b);
}
}
Salida:
100