1. Burkolattípusok listája

Tudja, hogy a Java-nak 8 primitív típusa van, amelyek nem osztályok. Egyrészt ez jó – egyszerűek és kevés helyet foglalnak el. Másrészt, néha az órákra éppen szükségünk van. A következő leckében megtudhatja, hogy pontosan miért.

Szóval mit lehet tenni?

A Java ötödik verziójától kezdve minden primitív típus kapott egy ikerosztályt. Minden ilyen osztály egyetlen mezőt tárol egy adott típusú értékkel. Ezeket az osztályokat wrapper típusoknak nevezzük , mivel primitív értékeket csomagolnak osztályokba.

Itt található ezeknek a típusoknak a listája. Tudsz valamit?

Primitív típus Burkolat osztály
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

A primitív típusok nevei kisbetűvel kezdődnek, de a wrapper osztályok nevei nagybetűvel kezdődnek. Néhány osztálynév is kicsit hosszabb: Integerhelyett intés Characterhelyett char.

A wrapper osztályok összes objektuma megváltoztathatatlan ( változhatatlan ).

Az osztály egyszerűsített kódja Integerígy néz ki:

Kód jegyzet
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);
   }
}


Változókonstruktor A metódus értéket ad vissza

A statikus metódus új objektumot hoz létre egy változóhoz









Integerint

2. A konvertálása an int-raInteger

A wrapper típusok a primitív testvéreik megfelelőinek számítanak: könnyen létrehozhatunk egy primitív típusnak megfelelő burkoló objektumot.

Használjuk az int típust példaként annak elemzésére, hogy a primitív típusok hogyan hatnak egymásra a megfelelő burkolótípusokkal. A kód az an-ról intan-ra Integerés fordítva a következőképpen néz ki:

intAhhoz, hogy egy -et konvertálhasson Integer, meg kell írnia ezt a kódot:

Integer name = new Integer(value);

Ahol namea változó neve Integer, és valuea becsomagolt intérték.

Példák:

Kód jegyzet
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

És az an konvertálásához Integermeg intkell írnia ezt a kódot:

int name = variable.intValue();

Ahol nameegy változó neve int, és variableegy objektumra való hivatkozás Integer.

Példák:

Kód jegyzet
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. Autobox és unboxing

De még az egyszerű műveleteket sem Integerkönnyű megírni a típussal.

Mint korábban említettük, a Integertípus megváltoztathatatlan ( változhatatlan ). IntegerÚj értékkel rendelkező objektum létrehozásához intkifejezetten új objektumot kell létrehoznia Integer. Ennek ellenére könnyű megszerezni integy objektumban tárolt érték értékét Integer– csak hívja a intValue()metódust.

Példa:

Kód Leírás
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Becsomagolás 5egy Integerobjektumba
Az érték lekérése az objektumból Hozzon Integerlétre
egy új Integerobjektumot (egyenlő 10-zel)

Ez elég nehézkes kód, nem gondolod?

A Java készítői így gondolták, ezért megtanították a fordítónak, hogyan kell ezeket a műveleteket automatikusan elvégezni. Az an- intnak automatikus konvertálását autoboxing-nakInteger ( az érték automatikus dobozba helyezése), a fordított műveletet (egy an- vá alakítását) unboxing- nak nevezzük .Integerint

A kódod Amit a fordító lát
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);

Az autoboxing és unboxing funkciónak köszönhetően biztonságosan hozzárendelhet egy intváltozóhoz Integerés fordítva. Bármilyen bonyolultságú kifejezést írhat anélkül, hogy különbséget tenne a intés Integertípusok között.

Példák:

Kód Amit a fordító generál
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. A wrapper változók összehasonlítása

Az automatikus dobozolás és a kicsomagolás egyszerű és átlátható folyamatok. Szükség szerint használunk utasításokat, szükség szerint new Integer()hívjuk meg a metódust.intValue()

Minden szépen és egyszerűen működik Önnek, programozónak. Ne feledje, hogy ha egy és egy -t hasonlít össze , akkor az összehasonlítás referencia és nem értékek alapján történik.IntegerInteger

Kód Konzol kimenet
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

A aés bváltozók nem tárolnak intértékeket. Tárolnak hivatkozásokat az objektumokra. Ez azt jelenti, hogy ne feledje, hogyan kell őket helyesen összehasonlítani:

Rossz Jobb
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}