1. Liste over indpakningstyper

Du ved, at Java har 8 primitive typer, som er typer, der ikke er klasser. På den ene side er det godt - de er enkle og fylder lidt. På den anden side er undervisning nogle gange lige, hvad vi har brug for. Du vil finde ud af præcis hvorfor det er i næste lektion.

Så hvad kan man gøre?

Fra den femte version af Java fik hver primitiv type en tvillingklasse. Hver sådan klasse gemmer et enkelt felt med en værdi af en bestemt type. Disse klasser kaldes wrapper-typer , fordi de ombryder primitive værdier i klasser.

Her er en liste over disse typer. Kender du nogen?

Primitiv type Indpakningsklasse
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Navnene på primitive typer starter med et lille bogstav, men navnene på indpakningsklasserne starter med et stort bogstav. Nogle af klassenavnene er også lidt længere: Integerinstead of intи Characterinstead of char.

Alle objekter i indpakningsklasserne er uforanderlige ( uforanderlige ).

Forenklet kode for Integerklassen ser sådan ud:

Kode Bemærk
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);
   }
}


Variable

Constructor




Metoden returnerer en værdi




Den statiske metode opretter et nyt Integerobjekt for en intvariabel

2. Konvertering af an inttil anInteger

Indpakningstyper betragtes som modstykker til deres primitive søskende: du kan nemt oprette et indpakningsobjekt, der svarer til en primitiv type.

Lad os bruge int-typen som et eksempel til at analysere, hvordan primitive typer interagerer med deres tilsvarende indpakningstyper. Koden til at konvertere fra en inttil en Integerog omvendt ville se sådan ud:

For at konvertere en inttil en Integer, skal du skrive denne kode:

Integer name = new Integer(value);

Hvor nameer navnet på en Integervariabel, og valueer den indpakkede intværdi.

Eksempler:

Kode Bemærk
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Og for at konvertere an Integertil en int, skal du skrive denne kode:

int name = variable.intValue();

Hvor nameer navnet på en intvariabel, og variableer en reference til et Integerobjekt.

Eksempler:

Kode Bemærk
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. Autoboxing og unboxing

Men selv simple operationer med Integertypen er ikke nemme at skrive.

Som vi sagde tidligere, Integerer typen uforanderlig ( uforanderlig ). For at oprette et Integerobjekt med en ny intværdi, skal du udtrykkeligt oprette et nyt Integerobjekt. Når det er sagt, er det nemt at få værdien af ​​et intgemt inde i et Integerobjekt - bare kald intValue()metoden.

Eksempel:

Kode Beskrivelse
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Indpak 5et Integerobjekt
Få værdien fra objektet IntegerOpret
et nyt Integerobjekt (lig med 10)

Det er ret besværlig kode, synes du ikke?

Det troede Javas skabere, så de lærte compileren, hvordan man udfører disse operationer automatisk. Den automatiske konvertering af en inttil en Integerkaldes autoboxing (automatisk sætter værdien ind i en boks), og den omvendte handling (konvertering af an Integertil en int) kaldes unboxing .

Din kode Hvad compileren 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 sikkert tildele en inttil en Integervariabel og omvendt. Du kan skrive udtryk af enhver kompleksitet uden at skelne mellem typerne intog Integer.

Eksempler:

Kode Hvad compileren 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. Sammenligning af indpakningsvariabler

Autoboxing og unboxing er enkle og gennemsigtige processer. Vi bruger new Integer()udsagn efter behov, og vi kalder intValue()metoden efter behov.

Alt fungerer fint og nemt for dig, programmøren. Vær opmærksom på, at hvis du sammenligner en Integerog en Integer, så er sammenligningen baseret på reference og ikke værdier.

Kode Konsoludgang
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

Variablerne aog bgemmer ikke intværdier. De gemmer referencer til objekter. Det betyder, at det er vigtigt at huske, hvordan man sammenligner dem korrekt:

Forkert Højre
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}