1. Lista de tipos de wrapper
Você sabe que Java tem 8 tipos primitivos, que são tipos que não são classes. Por um lado, isso é bom — são simples e ocupam pouco espaço. Por outro lado, às vezes as aulas são exatamente o que precisamos. Você descobrirá exatamente por que isso ocorre na próxima lição.
Então, o que pode ser feito?
A partir da quinta versão do Java, cada tipo primitivo ganhou uma classe gêmea. Cada uma dessas classes armazena um único campo com um valor de um tipo específico. Essas classes são chamadas de tipos wrapper , porque agrupam valores primitivos em classes.
Aqui está uma lista desses tipos. Você conhece algum?
tipo primitivo | classe wrapper |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Os nomes dos tipos primitivos começam com uma letra minúscula, mas os nomes das classes wrapper começam com uma letra maiúscula. Alguns nomes de classe também são um pouco mais longos: Integer
instead of int
и Character
instead of char
.
Todos os objetos das classes wrapper são imutáveis ( imutáveis ).
O código simplificado para a Integer
classe se parece com isto:
Código | Observação |
---|---|
|
Variável Construtor O método retorna um valor O método estático cria um novo Integer objeto para uma int variável |
2. Convertendo um int
em umInteger
Tipos wrapper são considerados equivalentes a seus irmãos primitivos: você pode facilmente criar um objeto wrapper que corresponda a um tipo primitivo.
Vamos usar o tipo int como exemplo para analisar como os tipos primitivos interagem com seus tipos wrapper correspondentes. O código para converter de um int
para um Integer
e vice-versa ficaria assim:
Para converter um int
para um Integer
, você precisa escrever este código:
Integer name = new Integer(value);
Onde name
é o nome de uma Integer
variável e value
é o int
valor agrupado.
Exemplos:
Código | Observação |
---|---|
|
|
|
|
|
E para converter o an Integer
em an int
, você precisa escrever este código:
int name = variable.intValue();
Onde name
é o nome de uma int
variável e variable
é uma referência a um Integer
objeto.
Exemplos:
Código | Observação |
---|---|
|
|
|
|
|
|
|
|
3. Autoboxing e unboxing
Mas mesmo operações simples com o Integer
tipo não são fáceis de escrever.
Como dissemos anteriormente, o Integer
tipo é imutável ( immutable ). Para criar um Integer
objeto com um novo int
valor, você precisa criar explicitamente um novo Integer
objeto. Dito isso, é fácil obter o valor de um int
armazenado dentro de um Integer
objeto — basta chamar o intValue()
método.
Exemplo:
Código | Descrição |
---|---|
|
Envolver 5 em um Integer objeto Obter o valor do Integer objeto Criar um novo Integer objeto (igual a 10) |
Este é um código bastante complicado, você não acha?
Os criadores de Java pensaram assim, então eles ensinaram o compilador a fazer essas operações automaticamente. A conversão automática de um int
para um Integer
é chamada autoboxing (colocar automaticamente o valor em uma caixa), e a operação inversa (converter um Integer
para um int
) é chamada unboxing .
Seu código | O que o compilador vê |
---|---|
|
|
|
|
|
|
Graças ao autoboxing e unboxing, você pode atribuir an com segurança int
a uma Integer
variável e vice-versa. Você pode escrever expressões de qualquer complexidade sem fazer distinção entre os tipos int
e Integer
.
Exemplos:
Código | O que o compilador irá gerar |
---|---|
|
|
|
|
4. Comparando variáveis wrapper
Autoboxing e unboxing são processos simples e transparentes. Usamos new Integer()
instruções conforme necessário e chamamos o intValue()
método conforme necessário.
Tudo funciona bem e fácil para você, o programador. Lembre-se de que, se você comparar an Integer
e an Integer
, a comparação será baseada em referência e não em valores.
Código | Saída do console |
---|---|
|
|
|
|
As variáveis a
e b
não armazenam int
valores. Eles armazenam referências a objetos. Isso significa que é importante lembrar como compará-los corretamente:
Errado | Certo |
---|---|
|
|
GO TO FULL VERSION