top of page

Casting y conversiones

     Hoy, en esta clase, vamos a ver el castings, que es la forma de convertir variables de un a otro tipo, por ejemplo, de int a float, de byte a double, de long a double, etc...

 

     Pero, antes de comenzar es muy bastante importante saber que son las referencias, cuando hablamos de referencias nos estamos refiriendo a una dirección en la memoria que indica donde esta una variable o un método. Cuando nosotros utilizamos un objeto, realmente lo que nosotros estamos haciendo no es realmente crear un nuevo objeto, de hecho nisiquiera estamos haciendo una copia, estamos utilizando una refencia a un metodo o a una variable, lo que esto quiere decir, es que si nosotros modificamos un objeto, al ser una refencia el valor de la variable original sería la que nosotros le estubiesemos asignando.

 

import java.awt.Point;

class ProbarReferencia {
    public static void main (String [ ] args){
        Point pt1, pt2;
        pt1 = new Point(100, 100);
        pt2 = pt1;
        pt1.x = 200;
        pt2.y = 200;
        System.out.println("Point: " + pt1.x + ", " + pt1.y);
        System.out.println("Point: " + pt2.x + ", " + pt2.y);
    }
}

 

run:
Point: 200, 200
Point: 200, 200
GENERACIÓN CORRECTA (total time: 0 seconds)

 

 

     Como podemos observar, aqui lo que estamos haciendo es crear una nueva referencia a pt1, esto lo hemos hecho a la hora de igualar pt2 a pt1, por eso al imprimir los valores de cada uno nos da que tienen el mismo valor, sin embargo, si en vez de igualarlos, pusiesemos:

 

pt2.x = 100;

pt2.y = 100;

 

El resultado que nos daría sería:

 

run:
Point: 200, 200
Point: 100, 100
GENERACIÓN CORRECTA (total time: 0 seconds)

 

     Espero que esto hasta aqui espero que haya quedado claro, una de las ventajas que nos da java a la hora de programar es la capacidad de poder hacer conversiones entre los tipos de variables y objetos como ya habia dicho antes, a esto de le denomina hacer casting, los tipos de casting mas comunes son:

 

Conversión entre variables.

Conversión entre objetos.

Conversión de objetos a variables.

Conversión de variables a objetos.

 

 

A diferencia de las ocasiones en las que hacemos una referencia, cuando hacemos casting no es asi, lo que hace el casting es crear un nuevo valor de distinto tipo, asi que cuando hacemos casting no podemos modificar el contenido de la variable original. Vamos a ver para comenzar como llevar acabo la conversión entre variables simples,cuando llevamos a cabo una conversión entre valores de variables simples la mayoría de las veces van a ser de valores enteros a valores decimales, y tambien hay que tener en cuentade que no podemos llevar a cabo conversiones con variables de tipo boolean, para llevar a cabo las conversiones lo que tenemos que hacer es colocar el tipo de la nueva variable seguido por el nombre de la nueva variable que queramos crear, y despues ighual a el tipo del valor al que lo queremos convertir entre parentesis seguido por el nombre de la variable al que queremos hacer el casting, de primeras esto puede ser u poco lioso y por ello aqui os pongo un ejemplo.

 

int valor1;

double valor2 = (double) valor2;

 

Y por si os preguntan que esto es algo mdianamente importante el valor de origen se llama fuente, y el valor una vez convertido se llama destino. Esto del casting muchas de las veces será posible, pero puede suceder que no siempre sea posible, en este caso pueden suceder cosas y esto tiene que ver con la capacidad de almacenamiento de las variables, en pocas palabras, el valor de la fuente puede no coger en el destino, a esto se denomina casting implicito, aqui teneis unos ejemplos:

 

byte > int

int > long

long > double

 

 

Ahora vamos a ver un casting en un programa de java, recuerda que tendrías que realizar tu tambien las practicas por tu cuenta.

 

class CastingVariables {
    public static void main (String [ ] args) {


        //Se realizan de modo explicito


        double x = 56.01;
        float y = (float) (x * 2);

        System.out.println(y);
        
        double temp1 = 3.4 * y;
        int temp2 = (int)(temp1);
        System.out.println(temp2);
    }
}

 

run:
112.02
380
GENERACIÓN CORRECTA (total time: 0 seconds)

 

 

     Tu mismo ya deberias saber como funciona este código, asi que lo mas recomendable es que lo veas, lo revises, y que intesten averiguar que es lo que hace y como lo hace por ti mismo. Veamos ahora como realizar casting entre objetos, que puede hacerse, pero para que esto sea posible la fuentey el destino tienen que estar relacionados por herencias, es decir una de las clases debe ser subclase de otra.

 

NOTA: Se puede hacer casting de una subclase a sus superclases.

 

Graphics2D comp = new Graphics2D;

Graphics comp2 = (Graphics) comp

 

 

NOTA: O de una superclase a sus subclases (A lo que se denomina de modo explicito)

 

Graphics comp = new Grphics();

Graphics2D comp2 = (Graphics2D) comp;

 

 

     Ahora veremos como realizar casting de variables primitivas a objetos y viceversa. Primero no se puede hacer casting de una variable primitiva a un objeto, pero en java existen clases para cada uno de las variables primitivas tal y como se muestra a continuación.

 

Clase Boolean

Clase Character

Clase Float

Clase Long

Clase Byte

Clase Double

Clase Integer

Clase Short

 

Integer cantidad = new Integer (1234);

int nuevaCantidad = cantidad.intValue();

 

 

     Una de las conversiones mas comunes a la hora de hacer casting es la conversión de un String a un valor numérico, como se muestra en el ejemplo que se muestra a continuación.

 

String cuenta = "45";

int valor = Integer.parseInt(cuenta);

 

 

De este modo lo que estamos haciendo es guardar un valor entero en la variable valor. Vamos a ver todo estoen un ejemplo practico.

 

class RaizNuevo {
    public static void main (String [ ] args) {
        
        double numero = 169;
        String algo1 = "169";
        
        if (algo1.length () > 0){
            numero = Integer.parseInt(algo1);
        }
        
        System. out. println("La raiz cuadrada de "
        + numero
        + " es: "
        + Math.sqrt(numero));
    }
}

 

run:
La raiz cuadrada de 169.0 es: 13.0
GENERACIÓN CORRECTA (total time: 0 seconds)

 

 

Y como siempre no estaria mal que intentases tu mismo averiguar que es lo que hace este código ya que esa es la forma en la que mas se aprende a programar en java, y hasta aqui, esta clase.

bottom of page