Está en la página 1de 4

Ejemplo de autoboxing y auto-unboxing.

//Demostración manual de boxing y unboxing con wrapper

class Wrapper {

public static void main(String[] args) {

Integer iOb = Integer.valueOf(100);

int i=iOb.intValue();

System.out.println(i+ " "+iOb);

//Demostración de autoboxing y unboxing

class Autobox {

public static void main(String[] args) {

Integer iOb = 100;

int i=iOb;

System.out.println(i+ " "+iOb);

// El autoboxing / unboxing se lleva a cabo

// con parámetros de método y valores devueltos.

class Autobox {

//Este método tiene un parámetro Integer.

static void m(Integer v){

System.out.println("m() recive "+v);

//Este método devuelve un int

static int m2(){


return 10;

//Este método devuelve un Integer

static Integer m3(){

return 99;

public static void main(String[] args) {

//Pasar una int a m().

//Debido a que m() tiene un parámetro Integer,

//el valor int pasado es automáticamente encapsulado.

m(199);

//Aquí, iOb recibe el valor int devuelto por m2().

//Este valor se encapsula automáticamente

//para que pueda asignarse a iOb

Integer iOb=m2();

System.out.println("El valor de retorno de m2() es: "+iOb);

//A continuación, se llama m3().

//Esto devuelve un valor Integer

//que se desencapsula automáticamente en un int.

int i=m3();

System.out.println("El valor de retorno de m3() es: "+i);

//A continuación, se llama a Math.sqrt() con iOb como argumento.

//En este caso, iOb se desencapsula automáticamente

//y su valor se promociona a double, que es el tipo que necesita sqrt().


iOb=100;

System.out.println("La raíz cuadrada de iOb es: "+Math.sqrt(iOb));

// Autoboxing / unboxing ocurre dentro de expresiones.

class Autobox {

public static void main(String[] args) {

Integer iOb, iOb2;

int i;

iOb=99;

System.out.println("Valor original de iOb: "+iOb);

//Lo siguiente desencapsula automáticamente iOb, realiza el incremento,

//y luego vuelve a re-capsular el resultado en iOb.

++iOb;

System.out.println("Después de ++iOb: "+iOb);

//Aquí, iOb es desencapsulado, su valor se incrementa en 10,

//y el resultado es encapsulado y almacenado de nuevo en iOb.

iOb+=10;

System.out.println("Después de iOb+=10: "+iOb);

//Aquí, iOb es desencapsulado, la expresión es evaluada,

//y el resultado es re-encapsulado y asignado a iOb2.

iOb2=iOb+(iOb/3);

System.out.println("iOb2 después de la expresión: "+iOb2);


//Se evalúa la misma expresión, pero el resultado no se vuelve a encapsular.

i= iOb+(iOb/3);

System.out.println("i después de la expresión: "+i);

Integer iOb=2;

switch (iOb){

case 1:

System.out.println("uno");

break;

case 2:

System.out.println("dos");

break;

default:

System.out.println("error");

//Un mal uso de autoboxing / auto-unboxing

Double a,b,c;

a=10.2;

b=11.4;

c=12.6;

Double avg=(a+b+c)/3;

//Un mal uso de autoboxing / auto-unboxing

Double a,b,c;

a=10.2;

b=11.4;

c=12.6;

Double avg=(a+b+c)/3;

También podría gustarte