CodeGym /Blogue Java /Random-PT /Classes wrapper em Java
John Squirrels
Nível 41
San Francisco

Classes wrapper em Java

Publicado no grupo Random-PT
Oi! Você já está bem familiarizado com os tipos primitivos e já trabalhou bastante com eles. Na programação (e em Java em particular), os primitivos têm muitas vantagens: eles usam pouca memória (e assim tornam o programa mais eficiente) e possuem uma faixa de valores claramente delineada. No entanto, ao aprender Java, já repetimos com frequência o mantra "tudo em Java é um objeto". Mas os primitivos contradizem diretamente essas palavras. Eles não são objetos. Então, nosso princípio "tudo é um objeto" é falso? Na verdade, não é. Em Java, todo tipo primitivo tem um irmão gêmeo, uma classe wrapper.

O que é uma classe Wrapper?

Um wrapper é uma classe especial que armazena uma primitiva internamente. Mas por ser uma classe, você pode criar instâncias dela. Eles armazenam os valores primitivos internamente, mas ainda são objetos reais. Os nomes das classes wrapper são muito semelhantes (ou exatamente iguais) aos nomes de suas primitivas correspondentes. Então, eles são fáceis de lembrar.
Classes wrapper para tipos de dados primitivos
Tipos de dados primitivos Classes de wrapper
int inteiro
curto Curto
longo Longo
byte Byte
flutuador Flutuador
dobro Dobro
Caracteres Personagem
boleano boleano
Objetos wrapper são criados da mesma forma que qualquer outro objeto:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
As classes wrapper nos permitem mitigar as deficiências dos tipos primitivos. A mais óbvia é que os primitivos não possuem métodos. Por exemplo, eles não têm um método toString() , então você não pode, por exemplo, converter um int em uma String . Mas a classe wrapper Integer torna isso fácil.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
No entanto, a conversão na outra direção pode ser mais complicada. Digamos que temos uma String , que sabemos com certeza que contém um número. Independentemente disso, não há uma maneira nativa de usar um int primitivo para extrair o número da String e convertê-lo em um número. Mas, podemos com as classes wrapper.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Saída:
1166628
Extraímos com sucesso um número da String e o atribuímos à variável de referência Integer i . A propósito, em relação às referências. Você já sabe que argumentos são passados ​​para métodos de maneiras diferentes: primitivos por valor e objetos por referência. Você pode usar esse conhecimento ao criar seus próprios métodos: por exemplo, se seu método usa números fracionários, mas você precisa que a lógica passe por referência, você pode passar argumentos Double / Float para o método em vez de double / float . Além dos métodos das classes wrapper, seus campos estáticos também podem ser muito convenientes. Por exemplo, imagine que você tenha a seguinte tarefa: exibir o máximo possívelvalor int , seguido pelo valor mínimo possível. Este problema parece bastante básico. Mas sem o Google, é improvável que você consiga. Mas os wrappers permitem que você lide facilmente com essas "tarefas mundanas":

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Esses campos evitam que você se distraia ao realizar tarefas mais sérias. Sem mencionar o fato de que digitar 2147483647 (que por acaso é o valor de MAX_VALUE) não é tarefa fácil! :) Além disso, em uma lição anterior, apontamos que os objetos wrapper são imutáveis.

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Saída:
0
O estado do objeto originalmente apontado por a não mudou (porque o valor de b também teria mudado). Assim como ocorre com String s, em vez de alterar o estado do objeto wrapper, um objeto totalmente novo é criado na memória. Então, por que os criadores de Java decidiram deixar os tipos primitivos na linguagem? Como tudo deve ser um objeto e temos classes wrapper que podem expressar tudo o que os primitivos expressam, por que não apenas manter os wrappers na linguagem e remover os primitivos? A resposta é simples: desempenho. Os tipos primitivos são chamados de primitivos porque carecem de muitos dos recursos "pesados" dos objetos. Sim, os objetos têm muitos métodos convenientes, mas nem sempre você precisa deles. Às vezes, tudo o que você precisa é do número 33, ou 2,62, ou true / false . Em situações em que as vantagens dos objetos não importam e não são necessárias para o funcionamento do programa, os primitivos são muito mais adequados para a tarefa.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION