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