Sobes.tech
Junior

¿Qué son las clases envolventes (Wrapper classes) en Java?

sobes.tech AI

Respuesta de la IA

Las clases envolventes en Java son clases que proporcionan una representación orientada a objetos de los tipos de datos primitivos. Permiten usar valores primitivos en contextos donde se requieren objetos, por ejemplo, en colecciones o al trabajar con concurrencia.

Clases envolventes principales:

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

Ejemplos de uso:

Uso de primitivos:

// Tipo primitivo
int x = 10;

Uso de la clase envolvente:

// Clase envolvente
Integer y = new Integer(20); // Forma obsoleta de crear
Integer z = 30; // Autoboxing (transformación automática de primitivo a objeto)

Conversión entre primitivos y objetos envolventes:

  • Autoboxing: Conversión automática de primitivo a objeto envolvente.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Conversión automática de objeto envolvente a primitivo.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Ventajas de las clases envolventes:

  • Trabajar con colecciones: Las colecciones (List, Set, Map) solo almacenan objetos.
  • Trabajar con null: Los objetos envolventes pueden tener valor null, a diferencia de los primitivos.
  • Proporcionan métodos útiles: Las clases envolventes tienen métodos para convertir cadenas, comparar valores, etc. Por ejemplo, Integer.parseInt(String s).
  • Trabajar con genéricos: Los genéricos solo funcionan con objetos.

Desventajas de las clases envolventes:

  • Consumo de memoria: Los objetos envolventes ocupan más memoria que los primitivos.
  • Reducción del rendimiento: La conversión automática (autoboxing y unboxing) puede reducir ligeramente el rendimiento.

Ejemplo de uso en una colección:

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)); // Creación explícita del objeto

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