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:
ByteShortIntegerLongFloatDoubleBooleanCharacter
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 valorenull, 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);
}
}