Java Boxing y sus curiosidades

Java Boxing es uno de los conceptos básicos de Java que mas dudas genera a los programadores cuando empiezan a trabajar con el lenguaje. Vamos a explicarlo a detalle. ¿Qué es exactamente el concepto de Java Boxing?. En Java existen dos tipos de estructuras fundamentales , los tipos básicos y los objetos.

Java Boxing Integer

Los tipos básicos únicamente son 8. Los tipos enteros , los flotantes , char y boolean. Todo lo demás son objetos en  Java.

Java Boxing y Genéricos

Los problemas comienzan cuando comenzamos a trabajar con tipos genéricos como por ejemplo los ArrayList . Podemos crear un ArrayList de cualquier tipo excepto de los tipos básicos.


package com.arquitecturava;

import java.util.ArrayList;

public class Principal {

 public static void main(String[] args) {
 
 
 ArrayList<Integer> lista= new ArrayList<Integer>();
 ArrayList<int> lista2= new ArrayList<int>(); // error de compilacion
 

 }

}

El entorno de desarrollo nos avisará de que no podemos generar un ArrayList de tipo “int” . Sin embargo no hay ningún problema para generar  un ArrayList de tipo Integer. Esto es debido a que las clases genéricas no soportan el uso de tipos básicos.  Ahora bien si añadimos las siguientes lineas de código :

 lista.add(new Integer(5));
 lista.add(5);

Ninguna de las lineas nos da error. Para muchas personas es sorprendente ya que estamos añadiendo un tipo básico a la lista y la lista es de objetos Integers. ¿Qué es lo que esta pasando exactamente?. Lo que sucede es que Java se da cuenta de lo que uno quiere hacer y convierte el tipo básico en un objeto Integer antes de ubicarle en la lista. Esto es lo que se denomina habitualmente Boxing (introducir en una caja).

Java Boxing Listas

De esta forma podemos añadir tipos básicos a listas genéricas. La misma operación pero de forma inversa (unboxing) es realizada por Java cuando deseamos recorrer la lista y acceder a los números.

Java Boxing UnBoxing

A continuación se muestra el código:


ArrayList<Integer> lista= new ArrayList<Integer>();

lista.add(new Integer(5));
lista.add(5);
lista.add(10);
lista.add(15);
lista.add(20);


for (int entero :lista) {

System.out.println(entero);
}

}

Java Boxing e igualdad

El concepto de unboxing se usa en otras situaciones y genera naturalidad en el código cuando comparamos por igualdad un objeto y un tipo Integer.


Integer numero1= new Integer(5);
int numero2=5;

System.out.println(numero1==numero2);

Si ejecutamos el resultado será true. Algo que en principio parece muy raro ya que el primero es un tipo básico y el segundo es un objeto. Esto se debe a que Java de forma automática realiza un unboxing de “numero1”.

Java Boxing Igualdad

Pues estas son las curiosidades que tiene Java Boxing.

Otros artículos relacionados

  1. Java String Pool , un concepto importante
  2. Java 8 Optional y NullPointerExceptions
  3. Java BigInteger
It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

4 Responses to Java Boxing y sus curiosidades

  1. Yoandy 30 Marzo, 2017 at 5:46 #

    Excelente, Cecilio una pregunta amigo, en que haces los gráficos que empleas en tus artículos ¿?

    • Cecilio Álvarez Caules 30 Marzo, 2017 at 7:05 #

      omnigrafle para mac 🙂

  2. Anthony Piñero 24 Marzo, 2017 at 14:33 #

    Es bueno saber estos detalles, mas aun para personas que se especializan en java

    • Cecilio Álvarez Caules 24 Marzo, 2017 at 18:47 #

      gracias 🙂

Deja un comentario