Comparar Strings no Java com o operador ==
em 04 de Setembro de 2020
Autoboxing é um recurso do compilador Java, presente desde o JDK 5, que faz a conversão entre tipos primitivos de dados e os respectivos objetos cujas classes acondicionam um determinado tipo primitivo. Por exemplo, converter um tipo primitivo int em um objeto cuja classe é Integer. O processo inverso é chamado de unboxing.
Dentro pacote java.lang, o Java oferece uma classe separada (wrapper class) que representa cada tipo primitivo de dado: Byte, Boolean, Character, Double, Integer, Float, Long e Short.
O compilador Java aplica autoboxing quando um valor primitivo é atribuído a uma variável do tipo wrapper class correspondente. Exemplo:
//Autoboxing
Integer num = 10;
No exemplo acima, a classe Integer representa um tipo numérico inteiro na forma de objeto (num), ou seja, ela empacota o tipo primitivo de dado int, por isso o nome wrapper class para este tipo de classe.
O compilador Java também aplica autoboxing em outra situação: quando um valor primitivo é passado como parâmetro em um método que espera por um objeto da wrapper class correspondente. Exemplo:
...
//Autoboxing
obj.soma(10, 15);
...
public Integer soma(Integer num1, Integer num2) {
return num1 + num2;
}
Unboxing é o processo inverso do autoboxing, convertendo um objeto proveniente de uma classe que acondiciona um tipo primitivo para um valor primitivo. Para exemplificar o emprego de unboxing, basta fazer o oposto dos exemplos de autoboxing.
Integer objInt = new Integer(10);
//Unboxing
int num = objInt;
Também no caso de passagem de parâmetros de uma função que espera por um tipo primitivo, mas um objeto da wrapper class correspondente é passado como parâmetro
...
//Unboxing
obj.soma(new Integer(10), new Integer(15));
...
public int soma(int num1, int num2) {
return num1 + num2;
}
Por isso este processo é chamado de unboxing, a classe é desempacotada e o tipo primitivo que ela representa é extraído de dentro do objeto em questão.
Autoboxing e Unboxing permitem os desenvolvedores escreverem um código mais claro, facilitando a leitura do mesmo. Mas devemos tomar certos cuidados como, por exemplo, não misturar tipos primitivos e objetos ao fazer comparações, pois podemos obter resultados imprevisíveis. Outro ponto é o processamento extra quando utilizamos wrapper classes; elas são mais “pesadas” que qualquer tipo primitivo que está sendo representado, por isso wrapper classes devem ser utilizadas com parcimônia para não pôr em xeque o desempenho da aplicação.