Autoboxing (niezmienne) - 1

"Cześć, Amigo!"

„Dzisiaj opowiem o autoboxingu . AutoBoxing oznacza automatyczne wkładanie czegoś do pudełka.”

„Przypomnij sobie, że Java ma typy, które dziedziczą klasę Object, a także typy pierwotne. Okazuje się jednak, że wygodne rzeczy, takie jak kolekcje i generyczne, działają tylko z typami, które dziedziczą klasę Object”.

„Wtedy podjęto decyzję o stworzeniu nieprymitywnego odpowiednika każdego prymitywnego typu”.

Typ pierwotny Nieprymitywny odpowiednik
bajt Bajt
krótki Krótki
int Liczba całkowita
długi Długi
platforma Platforma
podwójnie Podwójnie
logiczna logiczne
zwęglać Postać
próżnia Próżnia

„Ale ciągłe przełączanie między tymi typami jest bardzo niewygodne:”

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

„Zwłaszcza podczas bezpośredniej pracy z kolekcjami:”

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

„Dlatego twórcy Javy wymyślili «autoboxing» prymitywnych typów ich i„ unboxing ”do ich nieprymitywnych odpowiedników”.

"Oto jak to działa:

Co widzisz Co naprawdę się dzieje
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

„To wszystko jest proste. Możesz przypisać sobie typy int i Integer, a kompilator zajmie się całą resztą”.

„To bardzo wygodne”.

– Tak. Ale są pewne niuanse, o których opowiem później.