Sobes.tech
Junior

O que são as classes envolventes (Wrapper classes) em Java?

sobes.tech IA

Resposta da IA

As classes wrapper em Java são classes que fornecem uma representação orientada a objetos dos tipos de dados primitivos. Elas permitem usar valores primitivos em contextos onde são necessários objetos, por exemplo, em coleções ou ao trabalhar com concorrência.

Principais classes wrapper:

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

Exemplos de uso:

Uso de primitivos:

// Tipo primitivo
int x = 10;

Uso da classe wrapper:

// Classe wrapper
Integer y = new Integer(20); // Forma obsoleta de criar
Integer z = 30; // Autoboxing (conversão automática de primitivo para objeto)

Conversão entre primitivos e objetos wrapper:

  • Autoboxing: Conversão automática de primitivo para objeto wrapper.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Conversão automática de objeto wrapper para primitivo.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Vantagens das classes wrapper:

  • Trabalhar com coleções: Coleções (List, Set, Map) armazenam apenas objetos.
  • Trabalhar com null: Objetos wrapper podem ter valor null, ao contrário dos primitivos.
  • Fornecem métodos úteis: Classes wrapper têm métodos para converter strings, comparar valores, etc. Por exemplo, Integer.parseInt(String s).
  • Trabalhar com genéricos: Genéricos funcionam apenas com objetos.

Desvantagens das classes wrapper:

  • Consumo de memória: Objetos wrapper ocupam mais memória do que primitivos.
  • Redução de desempenho: A conversão automática (autoboxing e unboxing) pode diminuir ligeiramente o desempenho.

Exemplo de uso em coleção:

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)); // Criação explícita do objeto

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