Buscar este blog

viernes, 30 de abril de 2010

Operadores de conversión

La palabra conversión se utiliza con el sentido de "convertir a un molde". Java convertirá automáticamente un tipo de datos en otro cuando sea adecuado. Por ejemplo, si se asigna un valor entero a una variable de coma flotante, el compilador convertirá automáticamente el int en float. La conversión permite llevar a cabo estas conversiones de tipos de forma explícita, o forzarlas cuando no se diesen por defecto.

Para llevar a cabo una conversión, se pone el tipo de datos deseado (incluidos todos los modificadores) entre paréntesis a la izquierda de cualquier valor. He aquí un ejemplo:
void conversiones ( ) {
 int i = 200;
 long L = (long) i;
 long L2 = (long)2OO;
}
Como puede verse, es posible llevar a cabo una conversión, tanto con un valor numérico, como con
una variable. En las dos conversiones mostradas, la conversión es innecesaria, dado que el compilador convertirá un valor int en long cuando sea necesario. No obstante, se permite usar conversiones innecesarias para hacer el código más limpio. En otras situaciones, puede ser esencial una conversión para lograr que el código compile.

En C y C++, las conversiones pueden conllevar quebraderos de cabeza. En Java, la conversión de tipos es segura, con la excepción de que al llevar a cabo una de las denominadas conversiones reductoras (es decir, cuando se va de un tipo de datos que puede mantener más información a otro que no puede contener tanta) se corre el riesgo de perder información. En estos casos, el compilador fuerza a hacer una conversión explícita, diciendo, de hecho, "esto puede ser algo peligroso de hacer -si quieres que lo haga de todas formas, tiene que hacer la conversión de forma explícita". Con una conversión extensora no es necesaria una conversión explícita porque el nuevo tipo es capaz de albergar la información del viejo tipo sin que se pierda nunca ningún bit.

Java permite convertir cualquier tipo primitivo en cualquier otro tipo, excepto boolean, que no permite ninguna conversión. Los tipos clase no permiten ninguna conversión. Para convertir una a otra debe utilizar métodos especiales (String es un caso especial, los objetos pueden convertirse en una familia de tipos; un Roble puede convertirse en Árbol y viceversa, pero esto no puede hacerse con un tipo foráneo como Roca.)

No hay comentarios:

Publicar un comentario