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.