Tu portal de
formación online

Infórmate
Inicio » Catálogo » Curso de Programación en Java » Casting o transformaciones de tipo

Curso de Programación en Java

Casting o transformaciones de tipo

El casting es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas.

Dentro del casting de variables primitivas se distinguen dos clases

 

Implícito
No se necesita escribir código para que se lleve a cabo. Ocurre cuando se realiza una conversión ancha (widening casting), es decir, cuando se coloca un valor pequeño en un contenedor grande.
 int num1 = 100; 
long num2 = num1;
Explícito
Sí es necesario escribir código. Ocurre cuando se realiza una conversión estrecha (narrowing casting), es decir, cuando se coloca un valor grande en un contenedor pequeño. Son susceptibles de pérdida de datos.
 int num1 = 100; // ocupa 4 bytes
short num2 = (short) num1; 
/*num1 no encaja en un contenedor de 4 bytes. Hace falta casting explicito.*/

Se observa que antes de la variable a asignar se escribe el tipo al que se desea convertir dicha variable, esto se hace de manera explícita para tomar en cuenta las conversiones de tipos.

El manejo de este tipo de conversiones puede resultar un poco complicado si no se entiende bien por lo que vamos a explicar con una serie de ejemplos los casos más comunes:

Ejemplo 1
int num1 = 100; //ocupa 4 bytes
short num2 = (short)num1; /* num1 no encaja en un contenedor de 2 bytes. Hace falta casting explicito.*/
Si se sustituyera la primera línea int num1=100 por int num1=1000000, el código compilaría bien, pero habría pérdida de datos, pues el 1000000 se sale del rango de short [-32768, 32767]. Al mostrar por consola el valor se obtendría un resultado incongruente.
Ejemplo 2
 double num1 = 25.5; // ocupa 8 bytes
float num2 = (float)num1; /*num1 no encaja en un contenedor de 4 bytes. Hace falta casting explicito.*/
Ejemplo 3

Para que la línea

long num1 = 10000000000

compile debe hacerse un casting explícito a long

long num1 = 10000000000L  ó long num1 = 10000000000l

pero no

long num1 = (long)10000000000 /* Provoca error de compilación

porque, en la línea anterior, 10000000000 es considerado int, mientras que en las de arriba, double.*/

Ejemplo 4 (algo muy inusual)
byte num1 = 10;

Dado que cualquier entero, por defecto, se almacena en un int (4 bytes), con la línea anterior se pretende colocar un valor grande (el int 10) en un contenedor pequeño (una primitiva de tipo byte con capacidad para 1 byte). Esto, según lo expuesto anteriormente, precisa de casting explícito.

byte num1 = (byte)10;  //es lo que suele hacerse

Pero resulta que no hace falta ya que el compilador, cuando se trabaja con enteros, provoca un casting implícito contranatura y transforma automáticamente a byte el int 10. Ocurriría lo mismo si se trabaja con short o char.

Lo que pasa (y esto es lo que resulta extraño) es que no ocurre lo anterior con los números decimales, por eso, una línea como:

float num1 = 25.5;

provoca error de compilación. Recordar que cualquier decimal, por defecto, se almacena en un double (8 bytes) y que un tipo float tiene capacidad para 4 bytes. En los decimales el compilador no fuerza el casting implícito contranatura, de ahí que sea necesario un casting explicito a float para evitar errores de compilación.

Para finalizar con el casting entre primitivas, conviene tener en cuenta lo siguiente:

  • No es posible realizar casting entre una variable primitiva  booleana y cualquier otra variable primitiva.
  • Sí es posible realizar casting entre una variable primitiva char y una variable primitiva que almacene enteros.
 public class EjemploCastingChar{
    public static void main(String args[]){
        int num=164;
        char letra=(char)num;
        System.out.println(letra);
        System.out.println((char)164);
    }
}

 

Vamos a realizar varios casting de variables primitivas

 

Si desea obtener un acceso sin restricciones a los contenidos del curso de Programación en Java y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.
Este sitio web utiliza cookies de terceros con la finalidad de analizar el uso que hace de nuestra web y personalizar el contenido de los anuncios. Si continúa navegando entendemos que acepta su uso. Más información × Cerrar