1. Lista de tipos de envoltura

Sabes que Java tiene 8 tipos primitivos, que son tipos que no son clases. Por un lado, esto es bueno, son simples y ocupan poco espacio. Por otro lado, a veces las clases son justo lo que necesitamos. Descubrirás exactamente por qué es así en la próxima lección.

Entonces, ¿qué puede hacerse?

A partir de la quinta versión de Java, cada tipo primitivo ganó una clase gemela. Cada una de estas clases almacena un solo campo con un valor de un tipo específico. Estas clases se denominan tipos de contenedor porque envuelven valores primitivos en clases.

Aquí hay una lista de estos tipos. ¿Conoce alguna?

tipo primitivo Clase contenedora
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Los nombres de los tipos primitivos comienzan con una letra minúscula, pero los nombres de las clases contenedoras comienzan con una letra mayúscula. Algunos de los nombres de las clases también son un poco más largos: Integeren lugar de inty Characteren lugar de char.

Todos los objetos de las clases contenedoras son inmutables ( inmutables ).

El código simplificado para la Integerclase se parece a esto:

Código Nota
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}




Constructor de variables




El método devuelve un valor




El método estático crea un nuevo Integerobjeto para una intvariable

2. Convertir un inta unInteger

Los tipos contenedor se consideran contrapartes de sus hermanos primitivos: puede crear fácilmente un objeto contenedor que corresponda a un tipo primitivo.

Usemos el tipo int como ejemplo para analizar cómo interactúan los tipos primitivos con sus tipos de contenedor correspondientes. El código para convertir de an inta an Integery viceversa se vería así:

Para convertir un inta un Integer, debe escribir este código:

Integer name = new Integer(value);

Donde namees el nombre de una Integervariable y valuees el intvalor envuelto.

Ejemplos:

Código Nota
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Y para convertir an Integera an int, debe escribir este código:

int name = variable.intValue();

Donde namees el nombre de una intvariable y variablees una referencia a un Integerobjeto.

Ejemplos:

Código Nota
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110


3. Autoboxing y unboxing

Pero incluso las operaciones simples con el Integertipo no son fáciles de escribir.

Como dijimos anteriormente, el Integertipo es inmutable ( inmutable ). Para crear un Integerobjeto con un nuevo intvalor, debe crear explícitamente un nuevo Integerobjeto. Dicho esto, es fácil obtener el valor de an intalmacenado dentro de un Integerobjeto: simplemente llame al intValue()método.

Ejemplo:

Código Descripción
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Envolver 5en un Integerobjeto
Obtener el valor del Integerobjeto
Crear un nuevo Integerobjeto (igual a 10)

Este es un código bastante engorroso, ¿no crees?

Los creadores de Java así lo pensaron, así que le enseñaron al compilador cómo hacer estas operaciones automáticamente. La conversión automática de an inta an Integerse llama autoboxing (colocar automáticamente el valor en un cuadro), y la operación inversa (convertir an Integera an int) se llama unboxing .

Tu codigo Lo que ve el compilador
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

Gracias al autoboxing y unboxing, puede asignar con seguridad un inta una Integervariable y viceversa. Puede escribir expresiones de cualquier complejidad sin hacer una distinción entre los tipos inty Integer.

Ejemplos:

Código Lo que generará el compilador
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}

4. Comparación de variables contenedoras

Autoboxing y unboxing son procesos simples y transparentes. Usamos new Integer()declaraciones según sea necesario y llamamos al intValue()método según sea necesario.

Todo funciona agradable y fácil para usted, el programador. Tenga en cuenta que si compara an Integery an Integer, la comparación se basa en la referencia y no en los valores.

Código Salida de consola
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

Las variables ay bno almacenan intvalores. Almacenan referencias a objetos. Eso significa que es importante recordar cómo compararlos correctamente:

Equivocado Bien
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}