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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: Integer
en lugar de int
y Character
en lugar de char
.
Todos los objetos de las clases contenedoras son inmutables ( inmutables ).
El código simplificado para la Integer
clase se parece a esto:
Código | Nota |
---|---|
|
Constructor de variables El método devuelve un valor El método estático crea un nuevo Integer objeto para una int variable |
2. Convertir un int
a 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 int
a an Integer
y viceversa se vería así:
Para convertir un int
a un Integer
, debe escribir este código:
Integer name = new Integer(value);
Donde name
es el nombre de una Integer
variable y value
es el int
valor envuelto.
Ejemplos:
Código | Nota |
---|---|
|
|
|
|
|
Y para convertir an Integer
a an int
, debe escribir este código:
int name = variable.intValue();
Donde name
es el nombre de una int
variable y variable
es una referencia a un Integer
objeto.
Ejemplos:
Código | Nota |
---|---|
|
|
|
|
|
|
|
|
3. Autoboxing y unboxing
Pero incluso las operaciones simples con el Integer
tipo no son fáciles de escribir.
Como dijimos anteriormente, el Integer
tipo es inmutable ( inmutable ). Para crear un Integer
objeto con un nuevo int
valor, debe crear explícitamente un nuevo Integer
objeto. Dicho esto, es fácil obtener el valor de an int
almacenado dentro de un Integer
objeto: simplemente llame al intValue()
método.
Ejemplo:
Código | Descripción |
---|---|
|
Envolver 5 en un Integer objeto Obtener el valor del Integer objeto Crear un nuevo Integer objeto (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 int
a an Integer
se llama autoboxing (colocar automáticamente el valor en un cuadro), y la operación inversa (convertir an Integer
a an int
) se llama unboxing .
Tu codigo | Lo que ve el compilador |
---|---|
|
|
|
|
|
|
Gracias al autoboxing y unboxing, puede asignar con seguridad un int
a una Integer
variable y viceversa. Puede escribir expresiones de cualquier complejidad sin hacer una distinción entre los tipos int
y Integer
.
Ejemplos:
Código | Lo que generará el compilador |
---|---|
|
|
|
|
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 Integer
y an Integer
, la comparación se basa en la referencia y no en los valores.
Código | Salida de consola |
---|---|
|
|
|
|
Las variables a
y b
no almacenan int
valores. Almacenan referencias a objetos. Eso significa que es importante recordar cómo compararlos correctamente:
Equivocado | Bien |
---|---|
|
|
GO TO FULL VERSION