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
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

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: Integerinstead of intи Characterinstead of char.

Alle objekter i wrapper-klassene er uforanderlige ( uforanderlige ).

Forenklet kode for Integerklassen ser omtrent slik ut:

Kode Merk
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


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
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

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
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

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
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
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 en int) kalles unboxing .

Din kode Hva kompilatoren ser
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

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
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


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
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

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
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}