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();