Autoboxing (imutáveis) - 1

"Olá, amigo!"

"Hoje vou falar sobre autoboxing . AutoBoxing significa colocar algo automaticamente em uma caixa."

"Você deve se lembrar que Java tem tipos que herdam a classe Object, bem como tipos primitivos. Mas acontece que coisas convenientes como coleções e genéricos só funcionam com tipos que herdam Object."

"Então foi tomada a decisão de fazer uma contraparte não primitiva de todos os tipos primitivos."

tipo primitivo Contraparte não primitiva
byte Byte
curto Curto
int inteiro
longo Longo
flutuador Flutuador
dobro Dobro
boleano boleano
Caracteres Personagem
vazio Vazio

"Mas é super inconveniente converter entre esses tipos o tempo todo:"

int x = 3;
Integer y = new Integer(x + 1);
int z = y.intValue();

"Especialmente ao trabalhar diretamente com coleções:"

Exemplo
int[] numbers = new int[10];
ArrayList list = new ArrayList();
for (int i = 0; i < numbers.length; i++)
{
 list.add( new Integer(i));
}

"É por isso que os criadores de Java inventaram o «autoboxing» de seus tipos primitivos e o 'unboxing' de seus equivalentes não primitivos."

"É assim que funciona:

O que você vê O que realmente acontece
int x = 3;
Integer y = x + 1;
int x = 3;
Integer y = Integer.valueOf(x + 1);
int z = y;
int z = y.intValue();
Boolean b = Boolean.FALSE;
boolean a = b;
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
Integer x = null;
int y = x;
Integer x = null; int y = x.intValue(); //Throws an exception

"É tudo simples. Você pode atribuir tipos int e Integer um ao outro, e o compilador cuida de todo o resto."

"Isso é muito conveniente."

"Sim. Mas há nuances sobre as quais falarei mais tarde."