O que significa autoboxing ou boxing de tipos primitivos?
O que significa autoboxing ou boxing de tipos primitivos?
Oi Felipe, tudo bem?
Existem alguns momentos que precisamos representar um tipo primitivo como um objeto.
O método add()
de uma lista, por exemplo recebe um Object
. Exemplo:
Aluno a1 = new Aluno();
Aluno a2 = new Aluno();
List alunos = new ArrayList();
alunos.add(aluno1);
alunos.add(aluno2);
Quando estamos lidando com objetos, é ok, mas como fazer para ter uma lista de int
(tipo ptimitivo) por exemplo?
int num1 = 10;
int num2 = 42;
List numeros = new ArrayList();
numeros.add(num1); // num1 é um primitivo!
numeros.add(num2); // num2 tambem
Por esse motivo, o Java possui uma classe chama Integer
, que serve para representarmos um int
como um objeto.
Dizemos que essa classe é um wrapper, que envolve um primitivo int
e faz com que eu consiga representá-lo como um objeto.
O boxing, é guardar esse primitivo "dentro" da sua classe:
Integer num1 = new Integer(10);
Integer num2 = new Integer(42);
List numeros = new ArrayList();
numeros.add(num1);
numeros.add(num2);
O unboxing é quando precisamos obter o primitivo novamente:
int meuPrimitivo = num1.intValue();
Como é meio chato ficar criando objetos do tipo Integer, ou pegando primitivos int
a partir dos objetos, o compilador faz isso de forma automática. Então você pode simplesmente passar um primitivo onde é esperado um objeto (e vice-versa) e o java vai fazer essa conversão para você. Isso é o que se chama de autoboxing:
List numeros = new ArrayList();
numeros.add(10);
numeros.add(12);
Existem classes wrapper pra cada um dos tipos primitivos existentes no java.
Você pode ver mais sobre isso aqui
Abraço!