domingo, 22 de febrero de 2009

Auto boxing y unboxing desde java 5.0

Siguiendo con la temática de las innovaciones de java 5.0 hablemos ahora sobre los llamados boxing y unboxing, siendo éstas operaciones automáticas que se realizan cuando se intenta asignar a un objeto de una clase envolvente, una variable creado con su tipo primitivo correspondiente, o viceversa, veamos un ejemplo con el siguiente código:

public class Boxing {

public static void main(String[] args) {
double primitivo1, primitivo2;
Double envuelto;
primitivo1=98.15;
envuelto=primitivo1;
System.out.println(envuelto);
primitivo2=envuelto;
System.out.println(primitivo2);

}

}

Podemos ver en las primeras dos líneas de el método main que se crean tres variables, primitivo1 y primitivo2 son variables del tipo primitivo double y el tercero de nombre "envuelto" es un objeto del tipo de referencia (o envolvente) Double. Como puede verse puedo crear un dato de tipo primitivo double y asignárle su valor a un objeto de su tipo de referencia Double, como también puedo hacer lo contrario.

Al proceso se asignar al objeto de la clase envolvente un dato de su tipo primitivo correspondiente se llama boxing
(En el código: envuelto=primitivo1) y al procedimiento contrario, es decir, a asignarle a un dato primitivo un objeto de su clase envolvente se llama unboxing (En el código: primitivo2 = envuelto).

Esta operación a diferencia del casteo o moldeo es una operación implícita, es decir, la realiza java automáticamente, no es necesaria ninguna instrucción.

Veamos como esto puede simplificarnos la vida con las colecciones, tomando como ejemplo un objeto Vector:

public class Boxing {

public static void main(String[] args) {
Vector<Integer> vect = new Vector<Integer>();
int primitivo=15;
vect.add(primitivo);
}

}


En el método main de la c
lase Boxing se creó un objeto Vector con Generics que almacena Integer, si el boxing no estuviese disponible, yo tendría que haber realizado una creación de un objeto Integer, de la siguiente manera:

Integer envuelto = new Integer(primitivo);

Y después asignar al vector vect.add(envuelto) ya que Vector maneja Integer, por lo que nos ahorraríamos un línea de código, simplificando el trabajo y dejando a java resulelva esos inconvenientes. es decir, se elimina la necesidad de crear un objeto Integer para colocar un int en la colección.

Las conversiones permitidas son:

boolean <--> Boolean
byte <--> Byte
char <--> Character
short <--> Short
int <--> Integer
long
<--> Long
float <--> Float
double <--> Double


Bueno, espero haberme explicado y esta información les sea útil para conocer más herramientas sobre java 5.0, sin más, me despido hasta una próxima edición.

6 comentarios:

Carlos Celis dijo...

Lo probaré a ver q tal

Anónimo dijo...

genial! =)

Anónimo dijo...

Muy bien explicado !!!

Anónimo dijo...

muy bien explicado!!!

Anónimo dijo...

Todo muy claro!!!
Gracias!

Anónimo dijo...

Muchas gracias!!