Precisa de um freelancer, códigos-fonte e exemplos completos? Bem-vindo(a) ao meu site. Além de realizar alguns serviços como freelancer eu tenho alguns códigos-fonte e exemplos completos de Java, Delphi, PHP, Python, C/C++, Hibernate, JPA, Spring, JSP, Servlets, Ruby, Ruby On Rails e muitas outras linguagens e frameworks. Veja como falar comigo clicando aqui.
Recursos de autoboxing e unboxing
- O que são e quando devo usar?
1 - Introdução
Antes de falarmos sobre o que são autoboxing e unboxing,
vamos analisar o método add da classe ArrayList:
public boolean add(E
o)
Neste método podemos ver que o argumento E é do
tipo objeto, ou melhor, um tipo de referência a um objeto.
Sendo assim, o processo de adicionar um tipo primitivo (int,
float, double, etc) a uma ArrayList teria que ser feito usando
as classes invólucros (wrapper classes - Integer, Float,
Double, etc). Veja um exemplo:
import java.util.ArrayList;
public class Estudos{
public static void main(String[] args){
// cria uma ArrayList que conterá
inteiros
ArrayList<Integer> valores = new
ArrayList<Integer>();
// adiciona itens na lista
valores.add(new Integer(34));
valores.add(new Integer(10));
valores.add(new Integer(87));
System.exit(0);
}
}
Veja que antes de adicionar o valor primeiro (int) nós
tivemos que construir uma nova instância de uma classe
Integer. Esta classe Integer é uma classe invólucro
e serve especialmente para os casos em que precisamos passar
um valor primitivo para métodos que requerem referências
a objetos.
2 - Entendendo o autoboxing
Façamos um teste agora. Experimente alterar as chamadas
ao método add para esta nova versão:
// adiciona itens na
lista
valores.add(34);
valores.add(10);
valores.add(87);
Compile e execute o código. Você verá que
estas duas etapas ocorrem sem problemas. Agora o compilador
está inserindo o tipo primitivo na classe invólucro
automaticamente. Para nós, desenvolvedores, isso significa
alguns minutos de digitação a menos. É
claro que os bytecodes resultantes serão os mesmos, com
ou sem autoboxing.
3 - Apresentando o unboxing
Veja agora o método get da classe ArrayList:
public E get(int index)
Este método nos permite acessar um elemento na lista
mediante um índice. Porém, ainda que tenhamos
adicionado int, float, double ou outro tipo primitivo, o retorno
do método será uma referência a um objeto.
Dessa forma, o segundo elemento da ArrayList poderia ser obtido
assim:
// obtém o 2º
elemento
Integer elem = (Integer)(valores.get(1));
System.out.println(elem.intValue());
Aqui criamos uma nova instância da classe Integer e atribuímos
a ela o resultado de uma chamada ao método get. A conversão
de Object para Integer é explícita, já
que um Object não é um Integer. Finalmente o valor
primitivo é extraído com uma chamada ao método
intValue da classe Integer.
Veja agora como reduzir boa parte deste código:
// obtém o 2º
elemento
int elem = valores.get(1);
System.out.println(elem);
Agora o compilador se encarrega de criar a classe invólucro,
converter Object em Integer e extrair o tipo primitivo sem qualquer
esforço de nossa parte. Isso é unboxing.
4 - Resumindo
A conversão de um tipo primitivo para o tipo referência
correspondente é chamada de boxing e
a conversão do tipo referência para o tipo primitivo
correspondente é chamada de unboxing.
Todo o conteúdo deste site,
quando não devidamente observado, pertence a seus idealizadores
e não
poderá ser usado para outras finalidades senão estudo e
aprimoramento de técnicas de programação.
Certifique-se de ler asnotas legaisantes de proceder com
o acesso e leitura do
conteúdo disponibilizado nestas páginas.