Aprende sobre la conversión de tipos de datos en Java con ejemplos. ¿Cómo se procede a convertir de un byte a un short, un int, un long, float o double?
Cuando asigna valor de un tipo de datos a otro, los dos tipos pueden no ser compatibles entre sí. Si los tipos de datos son compatibles, entonces Java realizará la conversión (automáticamente) que se conoce como Conversión automática de tipos y, en caso negativo, deberá hacer un casting o convertirlo explícitamente. Por ejemplo, asignando un valor int
a una variable long
.
Tabla de Contenido
1. Conversión automática de tipos o ampliación
La conversión de ampliación tiene lugar cuando dos tipos de datos se convierten automáticamente. Esto sucede cuando:
- Los dos tipos de datos son compatibles.
- Cuando asignamos el valor de un tipo de datos más pequeño a un tipo de datos más grande.
Por ejemplo, en Java, los tipos de datos numéricos son compatibles entre sí, pero no se admite la conversión automática de tipo numérico a char o boolean. Además, char y boolean no son compatibles entre sí.
Ejemplo:
class Test
{
public static void main(String[] args)
{
int i = 100;
//conversion automatica de tipo
long l = i;
//conversion automatica de tipo
float f = l;
System.out.println("Valor Int "+i);
System.out.println("Valor Long "+l);
System.out.println("Valor Float "+f);
}
}
Salida:
Valor Int 100 Valor Long 100 Valor Float 100.0
2. Conversión explícita de tipo o casting
Si queremos asignar un valor de tipo de dato más grande a un tipo de dato más pequeño, realizamos un casteo/casting o lo que se conoce como conversión de tipo explícito.
- Esto es útil para tipos de datos incompatibles donde la conversión automática no se puede realizar.
- char y int no son compatibles entre sí. Veamos luego cuando tratamos de convertir uno en otro.
Ejemplo:
// 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
¿Cómo hacer una conversión explícita?
Ejemplo:
// 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
Ejemplo:
// 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
3. Tipo de promoción en Expresiones
public class PromocionAutomatica
{
public static void main(String args[])
{
byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;
}
}
Del código anterior, notamos que el resultado de a* b excede el rango de byte. Para manejar este tipo de problema, Java automáticamente promueve cada operando byte o short a int. En este ejemplo, a* b se realiza usando enteros.
Al evaluar expresiones, el valor intermedio puede exceder el rango de operandos y, por lo tanto, se promoverá el valor de la expresión. Algunas condiciones para la promoción de tipo son:
- Java automáticamente promueve cada operando byte, short, o char al evaluar una expresión.
- Si un operando es long, float o double, la expresión se promueve a long, float o double, respectivamente.
Ejemplo:
// 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
4. Casting de Tipo explícito en Expresiones
Al evaluar expresiones, el resultado se actualiza automáticamente a un tipo de datos más grande del operando. Pero si almacenamos ese resultado en un tipo de datos más pequeño, genera un error de tiempo de compilación, por lo que debemos “castear” el resultado.
Ejemplo:
// 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
3 comentarios
[…] Lo veremos más adelante, pero puede revisar: Conversión de tipos de datos en Java […]
Estoy interesado en el tema gracias x su comprensión.
[…] recordará anteriormente en Conversión de tipos de datos, Java proporciona ciertas conversiones de tipo automáticas. Estas conversiones también se aplican […]