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 |
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.