Sobes.tech
Junior

Πώς θα μετατρέπατε τους τύπους αναφοράς σε πρωταρχικούς και το αντίστροφο;

sobes.tech AI

Απάντηση από AI

Για τους τύπους αναφοράς (π.χ., Integer, Double, Boolean) χρησιμοποιείται αυτόματη συσκευασία (autoboxing) για τους πρωτογενείς τύπους (int, double, boolean). Η JVM μετατρέπει αυτόματα τον τύπο αναφοράς στον αντίστοιχο πρωτογενή τύπο όταν χρειάζεται.

// Πρωτογενής τύπος
int primitiveInt = 10;

// Δημιουργία τύπου αναφοράς από πρωτογενή τύπο (autoboxing)
Integer objectInt = primitiveInt; // Αυτόματη μετατροπή από int σε Integer

// Μετατροπή τύπου αναφοράς πίσω σε πρωτογενή (auto-unboxing)
int newPrimitiveInt = objectInt; // Αυτόματη μετατροπή από Integer σε int

Για τους πρωτογενείς τύπους σε τύπους αναφοράς (π.χ., int σε Integer, double σε Double, boolean σε Boolean) χρησιμοποιείται το autoboxing. Η JVM δημιουργεί αυτόματα ένα αντικείμενο του τύπου αναφοράς από μια πρωτογενή τιμή.

// Πρωτογενής τύπος
double primitiveDouble = 3.14;

// Δημιουργία τύπου αναφοράς από πρωτογενή (autoboxing)
Double objectDouble = primitiveDouble; // Αυτόματη μετατροπή από double σε Double

// Μετατροπή τύπου αναφοράς πίσω σε πρωτογενή (auto-unboxing)
double newPrimitiveDouble = objectDouble; // Αυτόματη μετατροπή από Double σε double

Είναι σημαντικό να θυμόμαστε ότι κατά τη μετατροπή ενός τύπου αναφοράς σε πρωτογενή (auto-unboxing), μπορεί να προκύψει NullPointerException αν ο τύπος αναφοράς έχει την τιμή null.

Επιπλέον, πριν από την εισαγωγή του autoboxing και autounboxing, χρησιμοποιούνταν ρητές μέθοδοι των κλάσεων wrapper, όπως intValue(), doubleValue(), booleanValue(), για τη μετατροπή τύπων αναφοράς σε πρωτογενείς, και κατασκευαστές ή στατικές μεθόδους valueOf() για τη μετατροπή πρωτογενών σε τύπους αναφοράς. Το autoboxing και autounboxing απλοποίησαν σημαντικά αυτή τη διαδικασία.

// Ρητή μετατροπή πριν από το autoboxing/autounboxing
Integer explicitInteger = new Integer(25); // Χρήση του κατασκευαστή (παρωχημένο)
int explicitInt = explicitInteger.intValue(); // Χρήση της μεθόδου intValue()

// Χρήση της στατικής μεθόδου valueOf() (προτιμότερο)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();