Sobes.tech
Junior

Τι είναι οι κλάσεις περιτύλιξης (Wrapper classes) στη Java;

sobes.tech AI

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

Οι κλάσεις wrapper στη Java είναι κλάσεις που παρέχουν μια αντικειμενοστραφή αναπαράσταση των πρωταρχικών τύπων δεδομένων. Επιτρέπουν τη χρήση πρωταρχικών τιμών σε συμφραζόμενα όπου απαιτούνται αντικείμενα, π.χ., σε συλλογές ή κατά την εργασία με πολυνηματικότητα.

Οι κύριες κλάσεις wrapper:

  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Boolean
  • Character

Παραδείγματα χρήσης:

Χρήση πρωταρχικών τύπων:

// Πρωταρχικός τύπος
int x = 10;

Χρήση της κλάσης wrapper:

// Κλάση wrapper
Integer y = new Integer(20); // Παλαιότερος τρόπος δημιουργίας
Integer z = 30; // Autoboxing (αυτόματη μετατροπή πρωταρχικού σε αντικείμενο)

Μετατροπή μεταξύ πρωταρχικών και αντικειμένων wrapper:

  • Autoboxing: Αυτόματη μετατροπή πρωταρχικού σε αντικείμενο wrapper.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Αυτόματη μετατροπή αντικειμένου wrapper σε πρωταρχικό:
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Πλεονεκτήματα των κλάσεων wrapper:

  • Εργασία με συλλογές: Οι συλλογές (List, Set, Map) αποθηκεύουν μόνο αντικείμενα.
  • Εργασία με null: Τα αντικείμενα wrapper μπορούν να έχουν την τιμή null, σε αντίθεση με τους πρωταρχικούς τύπους.
  • Παρέχουν χρήσιμες μεθόδους: Οι κλάσεις wrapper έχουν μεθόδους για μετατροπή συμβολοσειρών, σύγκριση τιμών κ.λπ. π.χ., Integer.parseInt(String s).
  • Εργασία με γενικούς τύπους: Οι γενικοί τύποι λειτουργούν μόνο με αντικείμενα.

Μειονεκτήματα των κλάσεων wrapper:

  • Κατανάλωση μνήμης: Τα αντικείμενα wrapper καταλαμβάνουν περισσότερο χώρο μνήμης από τους πρωταρχικούς τύπους.
  • Μείωση απόδοσης: Η αυτόματη μετατροπή (autoboxing και unboxing) μπορεί να μειώσει ελαφρώς την απόδοση. Παράδειγμα χρήσης σε συλλογή:
import java.util.ArrayList;
import java.util.List;

public class WrapperExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10); // Autoboxing
        numbers.add(new Integer(20)); // Ρητή δημιουργία αντικειμένου

        int firstNum = numbers.get(0); // Unboxing
        System.out.println(firstNum);
    }
}