Tipo primitivo Classe Wrapper Subclasse
Lógico Boolean Boolean Object
Caractere Char Caracter
Integral byte Byte Number
short Short
int Integer
long Long
Ponto Flutante float Float
Double Double
Tabela 1. Tipos primitivos e Classes Wrappers

Classes Wrappers possuem métodos públicos disponíveis na subclasse Object, devemos dar um maior destaque para os métodos equals(Object) e toString, o primeiro é utilizado para comparações enquanto que o segundo permite que o conteúdo de um objeto seja representado em formato de texto.

Classes derivadas da subclasse Number possuem vários métodos para devolverem um tipo primitivo, tais como: byteValue(), shortValue(), intValue(), longValue(), doubleValue(), floatValue().

Alem disso a as classes derivadas de Number possuem também o método comparareTo(Object) que faz comparações entre objetos wrapper.

Quais são as vantagens de tipos primitivos?

  • Tipos primitivos são bem rápidos
  • Consomem pouca memória
  • Além de permitirem operações mais complexas
  • São bastantes eficientes em laços e expressões

Para criar objetos Integer,Double , etc. Basta apenas chamar :


Integer i = new Integer();
Double d = new Double();

Para fazer obter uma valor encapsulado basta apenas:


float f = real.FloatValue();
double d = inteiro.doubleValue();

Encaixotamento e desencaixotamento automático no Java 5

As conversões de objetos tornaram-se mais fácil no JAVA 5 através do recurso de Autoboxing, em verdade esse recurso é conhecido por varios nomes tais como Autoboxing, Auto-unboxing, boxing e unboxing, não importa qual destes nomes usado, o importante é que eles tornam mais conveniente o uso de classes wrappers, antigamente no mundo pré-Java5, para se criar um wrapper, abri-lo. usa-lo e depois fecha-lo novamente era necessário fazer algo tal como:


//Criar 
Integer y = new Integer(45);

//Abrir
int x = y.intValue();

//use este 
x++;

//Fechar novamente
y = new Integer(x);

//Exibir
System.out.println(“y=” + i);

Já no Java ou superior:


 //Cria
 Integer y = new Integer(45);
 
 //Abre, incrementa, fecha novamente
 y++;
 
 //Exibe
 System.out.println(“y=” + i );

Ambos os casos vão dar o mesmo resultado y = 46

Mas acredite, o compilador é que faz todo o trabalho de encaixotar e desencaixotar no segundo código, ao contrario do primeira caso que ficou a cargo do programador.

Objetos Wrappers são imutáveis, não podem ser alterados após serem criados, não podem ser estendidas.

Objetos do tipo Boolean e Character possuem métodos diferenciados pois estes possuem valores que não são númericos. Exemplo: boolean b = logico.boleanValue();

O autoboxing tem como função permitir que valores primitivos possam ser atribuídos a referências do tipo wrapper e também para referências a subclasse Object, arrays e seus subelementos, podemos inclusive utilizar o recurso de autoboxing ao iniciar um array.

O desecaixotamento ou auto-unboxing permite uma operação reversa através da extração automática de de valores entre tipos equivalentes fazendo uso da atribuíção de objetos wrappers a váriaveis primitivas.

Onde pode ser usado o Boxing ?

Geralmente seu uso é muito comum em combinações com conjuntos, sempre que precisamos que nossos conjuntos amarazenem objetos e primitivos, usaremos wrappers para tornarem os tipos primitivos compatíveis com os conjuntos.

Falaremos um pouco mais sobre Classes Wrappers, Boxing e Unboxing em outros artigos.