(Anterior) Java 5 / JDK 5

Auto-boxing y auto-unboxing

 
public class Carrera { 


    public static void main(String[] args) { 

	// Contador de ciclos como objeto con asignacion primitivo
	Integer contador = 0;
	
	// Parametros
	double kilometros = 2.5; 
	int tiempo = 2;


	while(true) { 
	    // Utilizando auto-incremento sobre objeto Integer
	    System.out.print("Vuelta: " + contador++  + " "); 
	    // Operacion entre objeto Integer y primitivo double
	    System.out.print("Distancia: " + contador*kilometros + " ");
	    // Operacion entre objeto Integer y primitivo int
	    System.out.println("Tiempo: " + contador*tiempo + " ");
	    
	    // Comparacion sobre objeto Integer
	    if ( contador > 5) break; 
	}



    }

}

Nótese que en la clase anterior no fue necesario hacer ningún tipo de conversión explicita entre un primitivo y un objeto en varias ocasiones. La primera de estas es la asignación de un entero (int) directamente a un objeto Integer sin utilizar el vocablo new. Posteriormente dentro del ciclo while es aplicado el operador de auto-incremento directamente al mismo objeto Integer, además de ser realizadas dos operaciones sobre el objeto en sí: una multiplicación con un primitivo double y otra con un primitivo int. Finalmente es realizada una operación de comparación sobre el objeto Integer. Observemos otro ejemplo de sumatoria realizado en una colección de números Double :

 
import java.util.*;

public class Sumatoria
{ 
    public static void main(String args[])
    { 
	
    List<Double> calificaciones = new ArrayList<Double>();
    // Agregando primitivo double directamente en collecion de Double 
    calificaciones.add(9.20);
    calificaciones.add(8.41);
    calificaciones.add(8.92);
    calificaciones.add(9.31);
    calificaciones.add(7.20);

    // Inicializar variable sumatoria 
    double sumatoria = 0.0;
    for( Iterator<Double> it = calificaciones.iterator(); it.hasNext(); ) { 
	// Operacion entre objeto Double y primitivo double 
	sumatoria += it.next();
    }
    System.out.println("Promedio " + (sumatoria/calificaciones.size()) );

    }
}

El primer uso de auto-boxing en la clase anterior se lleva acabo al asignar los primitivos double directamente al metodo add() de la lista, de no ser por esta funcionalidad automática de conversión, se hubiera presentado un error ya que la lista espera un objeto de tipo Double como dato de entrada. Posteriormente, se lleva acabo un proceso de auto-unboxing al realizar una sumatoria sobre los elementos de la colección, este proceso se lleva acabo porque la variable sumatoria es un primitivo tipo double mientras los elementos extraídos se encuentran en formato de objeto Double.

Si aun no se convence de la ventajas de auto-boxing y auto-unboxing, intente compilar las dos clases presentadas en esta sección con un versión previa a Java 5 y notará la sintaxis extensa que debe agregar para que funcionen dichas clases. También puede consultar el uso de "Wrappers" y primitivos en Java de nuestro curso, donde se describe el proceso de conversión manual entre primitivos y objetos, aplicable a versiones JDK 1.4 y anteriores.

Menú Curso

Objetos, Java y JDK

Composición, Clases y Librerías("Packages").

Variables, Constructores, Métodos y Comentarios.

Herencias ("Inheritance"), Condicionales y Ciclos

Operadores, Errores y Datos de Entrada/"Streams".

Interfases, Arreglos y Polimorfismo.

Collections Framework, "Threads", Garbage Collection y "Assertions".

Java 5 / JDK 5 .

Instalación Software.

Codigo.