Os tipos primitivos, já são de conhecimento da maioria dos programadores e são exibidos na tabela abaixo:
As classes Wrapper nada mais são (em linhas gerais) do que uma Classe, que "representa um primitivo", desta forma, uma variável de um tipo Wrapper pode ser null e pode ser instanciada (na memória) ou não (quando possui valor nulo).
É fácil localizarmos as Classes Wrapper, que possuem os mesmos nomes dos tipos primitivos, somente com a primeira letra maiúscula.
O Java nos oferece Classes Wrapper para todos os tipos primitivos. Assim sendo, todas linhas de código abaixo são válidas.
Byte b = null; Short s = null; Integer i = null; Long l = null; Float f = null; Double d = null; Character c = null; Boolean bol = null;
Além de possuir diversos métodos para trabalharmos com os primitivos que ela representa, ela nos oferece dois construtores, um recebendo como parametro um valor do tipo primitivo que ela representa
Integer inteiro = new Integer(10);
e outra recebendo uma String que é convertida para o valor primitivo que a classe Wrapper representa,
Integer inteiroStr = new Integer("10");Uma das necessidades de se utilizar um Wrapper, ao invés de um primitivo, é construtores de classes de algumas API (Collections por exemplo) não suportam tipos primitivos. O código abaixo, por exemplo, não compila:
List<int> lista = new ArrayList<int>();
O correto, seria utilizar Wrapper:
List<Integer> lista = new ArrayList<Integer>();
Autoboxing
Um objeto Integer pode receber um primitivo diretamente, através do Autoboxing:
Integer i = 15;
Ou ainda:
int inteiroPrimitivo = 15; Integer k = inteiroPrimitivo;
Ou ainda, nossa lista de Integer pode receber diretamente um valor primitivo, ou usando o construtor recebendo uma String como parâmetro:
List<int> lista = new ArrayList<int>(); lista.add(15); lista.add(new Integer("40"));
Unboxing
Abaixo, exemplos de Unboxing explícitos e implícitos (automáticos):
int i = 10; Integer inteiroWrapper = new Integer(i); // Boxing Explicito int k = inteiroWrapper.intValue(); // Unboxing Explicito inteiroWrapper = i; // Boxing Automatico k = inteiroWrapper; // Unboxig Automatico
Resumindo, o procedimento de Boxing converte um valor primitivo numa referência do seu correspondente Wrapper (Integer), já no procedimento de Unboxing, a referencia é transformada no tipo primitivo correspondente.
Abaixo exemplos de outras conversões:
boolean boolValor = true; byte b = 2; short s = 2; char c = '2'; int i = 2; // Boxing Boolean boolReferencia = boolValor; Byte bReferencia = 88; Short sReferencia = 2; Character cReferencia = '2'; Integer iReferencia = 2; // Integer iRef1 = s; // ATENÇÂO!! tipos short não podem ser associados a Integer // Unboxing boolean boolVal1 = boolReferencia; byte b1 = bReferencia; short s1 = sReferencia; char c1 = cReferencia; int i1 = iReferencia;
Nenhum comentário:
Postar um comentário