Sobes.tech
Junior

Kaip paverstumėte nuorodų tipus į primityvius ir atvirkščiai?

sobes.tech AI

Atsakymas iš AI

Sąsajų tipų (pvz., Integer, Double, Boolean) atveju naudojamas automatinis nešiojimas (unboxing) iš pirminių (int, double, boolean) į sąsajos tipus. JVM automatiškai konvertuoja sąsajos tipą į jo pirminį ekvivalentą, kai to reikia:

// Pirminis tipas
int primitiveInt = 10;

// Sąsajos tipo sukūrimas iš pirminio (auto-boxing)
Integer objectInt = primitiveInt; // Automatinis `int` į `Integer` konvertavimas

// Sąsajos tipo konvertavimas atgal į pirminį (auto-unboxing)
int newPrimitiveInt = objectInt; // Automatinis `Integer` į `int` konvertavimas

Pirminių tipų konvertavimas į sąsajos tipus (auto-boxing) vyksta JVM automatiškai, sukuriant sąsajos tipo objektą iš pirminės reikšmės:

// Pirminis tipas
double primitiveDouble = 3.14;

// Sąsajos tipo sukūrimas iš pirminio (auto-boxing)
Double objectDouble = primitiveDouble; // Automatinis `double` į `Double` konvertavimas

// Sąsajos tipo konvertavimas atgal į pirminį (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Automatinis `Double` į `double` konvertavimas

Svarbu atsiminti, kad konvertuojant sąsajos tipą į pirminį (unboxing), gali įvykti NullPointerException, jei sąsajos tipas yra null.

Taip pat, iki auto-įdėjimo/atskyrimo atsiradimo, naudotos aiškios apvalkalo klasių metodai, tokie kaip intValue(), doubleValue(), booleanValue() konvertuoti sąsajos tipus į pirminius, ir apvalkalo klasių konstruktoriai arba statiniai metodai valueOf() pirminių tipų konvertavimui į sąsajos tipus. Auto-įdėjimas/atskyrimas žymiai supaprastino šį procesą.

// Tiesioginis konvertavimas iki auto-įdėjimo/atskyrimo
Integer explicitInteger = new Integer(25); // Pasenęs konstruktorius
int explicitInt = explicitInteger.intValue(); // `intValue()` metodo naudojimas

// Naudojant statinį metodą `valueOf()` (pageidautina)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();