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: Integeristället för intoch Characteristället för char.
Alla objekt i omslagsklasserna är oföränderliga ( oföränderliga ).
Förenklad kod för Integerklassen ser ut ungefär så här:
| Koda | Notera |
|---|---|
|
Variable Constructor Metoden returnerar ett värde Den statiska metoden skapar ett nytt Integerobjekt för en intvariabel |
2. Konvertera an inttill 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 inttill en Integeroch vice versa skulle se ut så här:
För att konvertera en inttill en Integermåste du skriva denna kod:
Integer name = new Integer(value);
Var nameär namnet på en Integervariabel och valueär det omslutna intvärdet.
Exempel:
| Koda | Notera |
|---|---|
|
|
|
|
|
Och för att konvertera an Integertill an intmåste du skriva denna kod:
int name = variable.intValue();
Var nameär namnet på en intvariabel och variableär en referens till ett Integerobjekt.
Exempel:
| Koda | Notera |
|---|---|
|
|
|
|
|
|
|
|
3. Autoboxning och unboxning
Men även enkla operationer med Integertypen är inte lätta att skriva.
Som vi sa tidigare Integerär typen oföränderlig ( oföränderlig ). För att skapa ett Integerobjekt med ett nytt intvärde måste du uttryckligen skapa ett nytt Integerobjekt. Som sagt, det är lätt att få värdet av ett intlagrat inuti ett Integerobjekt - anrop bara intValue()metoden.
Exempel:
| Koda | Beskrivning |
|---|---|
|
Linda 5in ett Integerobjekt Få värdet från Integerobjektet Skapa ett nytt Integerobjekt (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 inttill an Integerkallas autoboxing (automatiskt sätta värdet i en ruta), och den omvända operationen (konvertera an Integertill en int) kallas unboxing .
| Din kod | Vad kompilatorn ser |
|---|---|
|
|
|
|
|
|
Tack vare autoboxning och unboxing kan du säkert tilldela en inttill en Integervariabel och vice versa. Du kan skriva uttryck av vilken komplexitet som helst utan att göra skillnad mellan typerna intoch .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 Integeroch en Integer, så baseras jämförelsen på referens och inte värden.
| Koda | Konsolutgång |
|---|---|
|
|
|
|
Variablerna aoch blagrar inte intvä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