Sobes.tech
Junior

Cosa sono le classi wrapper in Java?

sobes.tech AI

Risposta dell'AI

Le classi wrapper in Java sono classi che forniscono una rappresentazione orientata agli oggetti dei tipi di dati primitivi. Permettono di usare valori primitivi in contesti in cui sono richiesti oggetti, ad esempio nelle collezioni o nel lavoro con la multithreading.

Classi wrapper principali:

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

Esempi di utilizzo:

Utilizzo dei primitivi:

// Tipo primitivo
int x = 10;

Utilizzo della classe wrapper:

// Classe wrapper
Integer y = new Integer(20); // Metodo obsoleto di creazione
Integer z = 30; // Autoboxing (conversione automatica del primitivo in oggetto)

Conversione tra primitivi e oggetti wrapper:

  • Autoboxing: Conversione automatica del primitivo in oggetto wrapper.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Conversione automatica dell'oggetto wrapper in primitivo.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Vantaggi delle classi wrapper:

  • Lavorare con le collezioni: Le collezioni (List, Set, Map) memorizzano solo oggetti.
  • Lavorare con null: Gli oggetti wrapper possono avere valore null, a differenza dei primitivi.
  • Forniscono metodi utili: Le classi wrapper hanno metodi per convertire stringhe, confrontare valori, ecc. Ad esempio, Integer.parseInt(String s).
  • Lavorare con i generici: I generici funzionano solo con oggetti.

Svantaggi delle classi wrapper:

  • Consumo di memoria: Gli oggetti wrapper occupano più memoria rispetto ai primitivi.
  • Riduzione delle prestazioni: La conversione automatica (autoboxing e unboxing) può ridurre leggermente le prestazioni.

Esempio di utilizzo in una collezione:

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)); // Creazione esplicita dell'oggetto

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