Sobes.tech
Junior

Ako by ste premenili referenčné typy na primitívne a naopak?

sobes.tech AI

Odpoveď od AI

Pre referenčných typov (napríklad Integer, Double, Boolean) sa používa automatické zabalenie (autoboxing) pre primitivné typy (int, double, boolean). JVM automaticky konvertuje referenčný typ na jeho ekvivalentný primitivný typ, keď je to potrebné.

// Primitívny typ
int primitiveInt = 10;

// Vytvorenie referenčného typu z primitivného (autoboxing)
Integer objectInt = primitiveInt; // Automatická konverzia z int na Integer

// Konverzia referenčného typu späť na primitivný (auto-unboxing)
int newPrimitiveInt = objectInt; // Automatická konverzia z Integer na int

Pre primitivné typy na referenčné typy (napríklad int na Integer, double na Double, boolean na Boolean) sa používa autoboxing. JVM automaticky vytvorí objekt referenčného typu z primitivnej hodnoty.

// Primitívny typ
double primitiveDouble = 3.14;

// Vytvorenie referenčného typu z primitivného (autoboxing)
Double objectDouble = primitiveDouble; // Automatická konverzia z double na Double

// Konverzia referenčného typu späť na primitivný (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Automatická konverzia z Double na double

Je dôležité si zapamätať, že pri konverzii referenčného typu na primitivný (auto-unboxing) môže dôjsť k NullPointerException, ak referenčný typ má hodnotu null.

Okrem toho, pred zavedením autoboxingu a auto-unboxingu sa používali explicitné metódy wrapper tried, ako intValue(), doubleValue(), booleanValue(), na konverziu referenčných typov na primitivy, a konštruktory alebo statické metódy valueOf() na konverziu primitivov na referenčné typy. Autoboxing a auto-unboxing tieto procesy výrazne zjednodušili.

// Explicitná konverzia pred autoboxing/autounboxing
Integer explicitInteger = new Integer(25); // Použitie konštruktora (zastaralé)
int explicitInt = explicitInteger.intValue(); // Použitie metódy intValue()

// Použitie statickej metódy valueOf() (preferované)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();