1. Liste over innpakningstyper
Du vet at Java har 8 primitive typer, som er typer som ikke er klasser. På den ene siden er dette bra - de er enkle og tar liten plass. På den annen side, noen ganger er timene akkurat det vi trenger. Du vil finne ut nøyaktig hvorfor det er i neste leksjon.
Så hva kan gjøres?
Fra og med den femte versjonen av Java, fikk hver primitiv type en tvillingklasse. Hver slik klasse lagrer et enkelt felt med en verdi av en bestemt type. Disse klassene kalles wrapper-typer , fordi de pakker inn primitive verdier i klasser.
Her er en liste over disse typene. Vet du om noen?
| Primitiv type | Innpakningsklasse |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Navnene på primitive typer starter med en liten bokstav, men navnene på omslagsklassene starter med en stor bokstav. Noen av klassenavnene er også litt lengre: Integeri stedet for intog Characteri stedet for char.
Alle objekter i wrapper-klassene er uforanderlige ( uforanderlige ).
Forenklet kode for Integerklassen ser omtrent slik ut:
| Kode | Merk |
|---|---|
|
Variabel Konstruktør Metoden returnerer en verdi Den statiske metoden oppretter et nytt Integerobjekt for en intvariabel |
2. Konvertere an inttil anInteger
Innpakningstyper regnes som motstykker til sine primitive søsken: du kan enkelt lage et innpakningsobjekt som tilsvarer en primitiv type.
La oss bruke int-typen som et eksempel for å analysere hvordan primitive typer samhandler med deres tilsvarende innpakningstyper. Koden for å konvertere fra en inttil en Integerog omvendt vil se slik ut:
For å konvertere en inttil en Integer, må du skrive denne koden:
Integer name = new Integer(value);
Hvor nameer navnet på en Integervariabel, og valueer den innpakkede intverdien.
Eksempler:
| Kode | Merk |
|---|---|
|
|
|
|
|
Og for å konvertere an Integertil en intmå du skrive denne koden:
int name = variable.intValue();
Hvor nameer navnet på en intvariabel, og variableer en referanse til et Integerobjekt.
Eksempler:
| Kode | Merk |
|---|---|
|
|
|
|
|
|
|
|
3. Autoboksing og unboxing
Men selv enkle operasjoner med Integertypen er ikke lett å skrive.
Som vi sa tidligere, Integerer typen uforanderlig ( uforanderlig ). For å lage et Integerobjekt med en ny intverdi, må du eksplisitt opprette et nytt Integerobjekt. Når det er sagt, er det enkelt å få verdien av et intlagret inne i et Integerobjekt - bare kall intValue()metoden.
Eksempel:
| Kode | Beskrivelse |
|---|---|
|
Pakk 5inn et Integerobjekt Få verdien fra Integerobjektet Opprett et nytt Integerobjekt (lik 10) |
Dette er ganske tungvint kode, synes du ikke?
Javas skapere trodde det, så de lærte kompilatoren hvordan disse operasjonene skulle utføres automatisk. Den automatiske konverteringen av an inttil an Integerkalles autoboxing (automatisk sette verdien inn i en boks), og den omvendte operasjonen (konvertere an Integertil an int) kalles unboxing .
| Din kode | Hva kompilatoren ser |
|---|---|
|
|
|
|
|
|
Takket være autoboxing og unboxing kan du trygt tilordne en inttil en Integervariabel og omvendt. Du kan skrive uttrykk av enhver kompleksitet uten å skille mellom typene intog Integer.
Eksempler:
| Kode | Hva kompilatoren vil generere |
|---|---|
|
|
|
|
4. Sammenligne innpakningsvariabler
Autoboxing og unboxing er enkle og transparente prosesser. Vi bruker new Integer()utsagn etter behov, og vi kaller intValue()metoden etter behov.
Alt fungerer fint og enkelt for deg, programmereren. Vær oppmerksom på at hvis du sammenligner en Integerog en Integer, så er sammenligningen basert på referanse og ikke verdier.
| Kode | Konsollutgang |
|---|---|
|
|
|
|
Variablene aog blagrer ikke intverdier. De lagrer referanser til objekter. Det betyr at det er viktig å huske hvordan du sammenligner dem riktig:
| Feil | Ikke sant |
|---|---|
|
|
GO TO FULL VERSION