1. Lista över omslagstyper
Du vet att Java har 8 primitiva typer, vilket är typer som inte är klasser. Å ena sidan är det här bra - de är enkla och tar liten plats. Å andra sidan, ibland är lektioner precis vad vi behöver. Du kommer att få reda på exakt varför det är i nästa lektion.
Så vad kan göras?
Från och med den femte versionen av Java fick varje primitiv typ en tvillingklass. Varje sådan klass lagrar ett enda fält med ett värde av en specifik typ. Dessa klasser kallas omslagstyper eftersom de lindar in primitiva värden i klasser.
Här är en lista över dessa typer. Vet du några?
Primitiv typ | Omslagsklass |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Namnen på primitiva typer börjar med en liten bokstav, men namnen på omslagsklasserna börjar med en stor bokstav. Vissa av klassnamnen är också lite längre: Integer
instead of int
и Character
instead of char
.
Alla objekt i omslagsklasserna är oföränderliga ( oföränderliga ).
Förenklad kod för Integer
klassen ser ut ungefär så här:
Koda | Notera |
---|---|
|
Variable Constructor Metoden returnerar ett värde Den statiska metoden skapar ett nytt Integer objekt för en int variabel |
2. Konvertera an int
till anInteger
Omslagstyper anses vara motsvarigheter till sina primitiva syskon: du kan enkelt skapa ett omslagsobjekt som motsvarar en primitiv typ.
Låt oss använda int-typen som ett exempel för att analysera hur primitiva typer interagerar med sina motsvarande omslagstyper. Koden för att konvertera från en int
till en Integer
och vice versa skulle se ut så här:
För att konvertera en int
till en Integer
måste du skriva denna kod:
Integer name = new Integer(value);
Var name
är namnet på en Integer
variabel och value
är det omslutna int
värdet.
Exempel:
Koda | Notera |
---|---|
|
|
|
|
|
Och för att konvertera an Integer
till an int
måste du skriva denna kod:
int name = variable.intValue();
Var name
är namnet på en int
variabel och variable
är en referens till ett Integer
objekt.
Exempel:
Koda | Notera |
---|---|
|
|
|
|
|
|
|
|
3. Autoboxning och unboxning
Men även enkla operationer med Integer
typen är inte lätta att skriva.
Som vi sa tidigare Integer
är typen oföränderlig ( oföränderlig ). För att skapa ett Integer
objekt med ett nytt int
värde måste du uttryckligen skapa ett nytt Integer
objekt. Som sagt, det är lätt att få värdet av ett int
lagrat inuti ett Integer
objekt - anrop bara intValue()
metoden.
Exempel:
Koda | Beskrivning |
---|---|
|
Linda 5 in ett Integer objekt Få värdet från Integer objektet Skapa ett nytt Integer objekt (lika med 10) |
Det här är ganska besvärlig kod, tycker du inte?
Javas skapare trodde det, så de lärde kompilatorn hur man gör dessa operationer automatiskt. Den automatiska omvandlingen av an int
till an Integer
kallas autoboxning (automatiskt sätta värdet i en ruta), och den omvända operationen (konvertera an Integer
till en int
) kallas unboxing .
Din kod | Vad kompilatorn ser |
---|---|
|
|
|
|
|
|
Tack vare autoboxning och unboxing kan du säkert tilldela en int
till en Integer
variabel och vice versa. Du kan skriva uttryck av vilken komplexitet som helst utan att göra skillnad mellan typerna int
och .Integer
Exempel:
Koda | Vad kompilatorn kommer att generera |
---|---|
|
|
|
|
4. Jämföra omslagsvariabler
Autoboxning och unboxing är enkla och transparenta processer. Vi använder new Integer()
påståenden efter behov, och vi kallar intValue()
metoden efter behov.
Allt fungerar bra och enkelt för dig, programmeraren. Tänk på att om du jämför en Integer
och en Integer
, så baseras jämförelsen på referens och inte värden.
Koda | Konsolutgång |
---|---|
|
|
|
|
Variablerna a
och b
lagrar inte int
värden. De lagrar referenser till objekt. Det betyder att det är viktigt att komma ihåg hur man jämför dem korrekt:
Fel | Höger |
---|---|
|
|
GO TO FULL VERSION