1. Lista de tipos envolventes
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 solo necesitamos clases. Descubrirás exactamente por qué en la próxima lección.
¿Entonces qué se puede hacer?
A partir de la quinta versión de Java, cada tipo primitivo obtuvo una clase complementaria. Cada una de estas clases almacena un solo campo con un valor de un tipo específico. Estas clases se llaman tipos envolventes, porque envuelven valores primitivos en clases.
Aquí tienes una lista de estos tipos. ¿Conoces alguno?
Tipo Primitivo | Wrapper class |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Los nombres de los tipos primitivos comienzan con una letra minúscula, pero los nombres de las clases de envoltorio comienzan con una letra mayúscula. Algunos de los nombres de las clases también son un poco más largos: Integer
en lugar de int
y Character
en lugar de char
.
Todos los objetos de las clases de envoltorio son inmutables (immutable).
Un código simplificado para la clase Integer
se parece a esto:
Codigo | Notas |
---|---|
|
Variable Constructor El metodo retorna un valor El método estático crea un nuevo objeto Integer para una variable int .
|
2. Conversión de un int
a un Integer
Los tipos de envoltura se consideran contrapartes de sus tipos primitivos: puedes crear fácilmente un objeto envolvente que corresponda a un tipo primitivo.
Usemos el tipo int como ejemplo para analizar cómo los tipos primitivos interactúan con sus tipos de envoltura correspondientes. El código para convertir de un int
a un Integer
y viceversa se vería así:
Para convertir un int
a un Integer
, necesitas escribir este código:
Integer name = new Integer(value);
Donde name
es el nombre de una variable Integer
, y value
es el valor int
envuelto.
Ejemplos:
Codigo | Notas |
---|---|
|
|
|
|
|
Para convertir un Integer
a un int
, necesitas escribir este código:
int name = variable.intValue();
Donde name
es el nombre de una variable de tipo int
, y variable
es una referencia a un objeto Integer
.
Ejemplos:
Code | Note |
---|---|
|
|
|
|
|
|
|
|
3. Autoboxing and unboxing
Sin embargo, incluso las operaciones simples con el tipo Integer
no son fáciles de escribir.
Como dijimos anteriormente, el tipo Integer
es inmutable. Para crear un objeto Integer
con un nuevo valor int
, es necesario crear explícitamente un nuevo objeto Integer
. Dicho esto, es fácil obtener el valor de un int
almacenado dentro de un objeto Integer
- simplemente llame al método intValue()
.
Ejemplo:
Code | Description |
---|---|
|
Wrap 5 en un Integer objecto Obten el valor de Integer objectoCrea un nuevo Integer objecto (igual a 10) |
¿No te parece que este código es algo engorroso?
Los creadores de Java pensaron lo mismo, así que enseñaron al compilador a hacer estas operaciones automáticamente. La conversión automática de un int
a un Integer
se llama autoboxing (poner automáticamente el valor en una caja), y la operación inversa (convertir un Integer
a un int
) se llama unboxing.
Tu codigo | Lo que ve el compilador |
---|---|
|
|
|
|
|
|
Gracias al autoboxing y unboxing, puedes asignar de manera segura un int
a una variable Integer
y viceversa. Puedes escribir expresiones de cualquier complejidad sin hacer una distinción entre los tipos int
e Integer
.
Ejemplos:
Código | Lo que el compilador generará |
---|---|
|
|
|
|
4. Comparando variables envueltas
La autoboxing y unboxing son procesos simples y transparentes. Usamos las sentencias new Integer()
según sea necesario y llamamos al método intValue()
según sea necesario.
Todo funciona bien y fácil para ti, el programador. Pero ten en cuenta que si comparas un Integer
y un Integer
, la comparación se basa en la referencia y no en los valores.
Code | Console output |
---|---|
|
|
|
|
Las variables a
y b
no almacenan valores int
. Almacenan referencias a objetos. Eso significa que es importante recordar cómo compararlos correctamente:
Incorrecto | Correcto |
---|---|
|
|
GO TO FULL VERSION