Sobes.tech
Junior

Hogyan alakítanád át a referencia típusokat primitív típusokra és fordítva?

sobes.tech MI

Válasz az MI-től

Referencia típusokhoz (például Integer, Double, Boolean) automatikus csomagolás (autoboxing) használatos a primitív típusok (int, double, boolean) esetén. A JVM automatikusan átalakítja a referencia típust a megfelelő primitív típusra, amikor szükséges.

// Primitív típus
int primitiveInt = 10;

// Referencia típus létrehozása primitívből (autoboxing)
Integer objectInt = primitiveInt; // Automatikus konverzió int-ről Integer-re

// Referencia típus visszaalakítása primitívvé (auto-unboxing)
int newPrimitiveInt = objectInt; // Automatikus konverzió Integer-ről int-re

Primitív típusokból referencia típusokba (pl. int-ből Integer, double-ből Double, boolean-ból Boolean) az autoboxing használatos. A JVM automatikusan létrehoz egy referencia típusú objektumot a primitív értékből.

// Primitív típus
double primitiveDouble = 3.14;

// Referencia típus létrehozása primitívből (autoboxing)
Double objectDouble = primitiveDouble; // Automatikus konverzió double-ról Double-re

// Referencia típus visszaalakítása primitívvé (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Automatikus konverzió Double-ről double-re

Fontos megjegyezni, hogy az auto-unboxing során, ha a referencia típus értéke null, akkor NullPointerException keletkezhet.

Ezen kívül, az auto-boxing és auto-unboxing bevezetése előtt explicit módszereket használtak a wrapper osztályokban, mint például intValue(), doubleValue(), booleanValue(), a referencia típusok primitív típusokra való konvertálására, és konstruktorokat vagy statikus valueOf() metódusokat a primitív típusok referencia típusokra való konvertálására. Az auto-boxing és auto-unboxing jelentősen egyszerűsítette ezt a folyamatot.

// Explicit konverzió autoboxing/autounboxing előtt
Integer explicitInteger = new Integer(25); // Konstruktor használata (elavult)
int explicitInt = explicitInteger.intValue(); // intValue() metódus használata

// A `valueOf()` statikus metódus használata (előnyös)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();