Sobes.tech
Junior

Cum ați converti tipurile de referință în primitive și vice versa?

sobes.tech AI

Răspuns de la AI

Pentru tipurile de referință (de exemplu, Integer, Double, Boolean) se utilizează auto-boxing (împachetare automată) pentru tipurile primitive (int, double, boolean). JVM convertește automat tipul de referință în echivalentul său primitiv atunci când este necesar.

// Tip primitiv
int primitiveInt = 10;

// Crearea unui tip de referință dintr-un tip primitiv (auto-boxing)
Integer objectInt = primitiveInt; // Conversie automată de la int la Integer

// Conversia unui tip de referință înapoi în primitiv (auto-unboxing)
int newPrimitiveInt = objectInt; // Conversie automată de la Integer la int

Pentru tipurile primitive în tipuri de referință (de exemplu, int în Integer, double în Double, boolean în Boolean) se folosește auto-boxing. JVM creează automat un obiect de tip de referință dintr-o valoare primitivă.

// Tip primitiv
double primitiveDouble = 3.14;

// Crearea unui tip de referință dintr-un primitiv (auto-boxing)
Double objectDouble = primitiveDouble; // Conversie automată de la double la Double

// Conversia unui tip de referință înapoi în primitiv (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Conversie automată de la Double la double

Este important să reținem că, în timpul conversiei unui tip de referință în primitiv (auto-unboxing), poate apărea o NullPointerException dacă tipul de referință are valoarea null.

De asemenea, înainte de apariția auto-boxing și auto-unboxing, se foloseau metode explicite ale claselor wrapper, precum intValue(), doubleValue(), booleanValue(), pentru conversia tipurilor de referință în primitive, și constructori sau metode statice valueOf() pentru conversia primitive în tipuri de referință. Auto-boxing și auto-unboxing au simplificat considerabil acest proces.

// Conversie explicită înainte de auto-boxing/auto-unboxing
Integer explicitInteger = new Integer(25); // Utilizarea constructorului (învechit)
int explicitInt = explicitInteger.intValue(); // Utilizarea metodei intValue()

// Utilizarea metodei statice valueOf() (preferabil)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();