DEV Community

Autoboxing/Unboxing em Expressões e Advertências

Autoboxing e Unboxing em Expressões

  • Conversão Automática: O autoboxing (encapsular) e o unboxing (desencapsular) ocorrem automaticamente em expressões, conforme necessário.

Por exemplo:
Unboxing: Um objeto numérico sofre unboxing para executar cálculos.
Encapsulamento de Resultados: O resultado pode ser encapsulado novamente em um objeto.

Exemplo Prático:

Integer iOb = 99;
++iOb;  // Unboxing, incremento, e encapsulamento do resultado.
iOb += 10;  // Unboxing, soma de 10 e encapsulamento do resultado.
Integer iOb2 = iOb + (iOb / 3);  // Unboxing, cálculo e reencapsulamento.
int i = iOb + (iOb / 3);  // Apenas unboxing, sem encapsulamento.

Enter fullscreen mode Exit fullscreen mode

Saída:

Original value of iOb: 99
After ++iOb: 100
After iOb += 10: 110
iOb2 after expression: 146
i after expression: 146

Enter fullscreen mode Exit fullscreen mode

Uso em switch:

Objetos como Integer podem ser usados diretamente em instruções switch devido ao unboxing automático.

Integer iOb = 2;
switch(iOb) {
  case 1: System.out.println("one"); break;
  case 2: System.out.println("two"); break;
  default: System.out.println("error");
}

Enter fullscreen mode Exit fullscreen mode

Advertências sobre o Uso Excessivo de Encapsuladores

  • Embora o autoboxing/unboxing facilite o uso de objetos em expressões, há sobrecarga de desempenho.

Exemplo de Uso Ineficiente:

Double a = 10.2, b = 11.4, c = 9.8;
Double avg = (a + b + c) / 3;  // Opera com objetos Double em vez de double.

Enter fullscreen mode Exit fullscreen mode

Esse código é funcional, mas ineficiente devido ao custo adicional do autoboxing/unboxing.

Recomendação

  • Use encapsuladores de tipos (como Integer ou Double) somente quando a representação como objeto for essencial.
  • Evite substituir os tipos primitivos desnecessariamente por encapsuladores.
  • O objetivo do autoboxing/unboxing é simplificar a manipulação de objetos, não eliminar tipos primitivos.

--
Image description

Top comments (0)