DEV Community

Emanoel Carvalho
Emanoel Carvalho

Posted on

Tipos Primitivos e Classes Invólucras (Wrapper Classes) em Java

Quando começamos a programar em Java e a dar os primeiros passos no paradigma de Orientação a Objetos (OO), é comum nos depararmos com duas formas de declarar tipos de dados: tipos primitivos e tipos de referência (ou classes invólucras). Uma das dúvidas mais frequentes dos iniciantes é entender por que existem duas maneiras de expressar um tipo, como por exemplo, double e Double, ou int e Integer.

Neste artigo, vamos explorar o que são os tipos primitivos e as classes invólucras, explicando suas diferenças, como usá-los e quando é mais apropriado escolher um ou outro.

1. O que são Tipos Primitivos?

Em Java, tipos primitivos são os tipos de dados básicos, que não são objetos. Eles representam valores simples e são mais eficientes em termos de uso de memória e desempenho.

Java tem oito tipos primitivos:

  • byte: Representa números inteiros de 8 bits.
  • short: Representa números inteiros de 16 bits.
  • int: Representa números inteiros de 32 bits.
  • long: Representa números inteiros de 64 bits.
  • float: Representa números de ponto flutuante de 32 bits.
  • double: Representa números de ponto flutuante de 64 bits.
  • char: Representa um único caractere Unicode (16 bits).
  • boolean: Representa valores lógicos, como true ou false.

Esses tipos são simples, diretos e mais rápidos para operações numéricas e lógicas, pois não envolvem o overhead de objetos, que seria o custo adicional em termos de memória e desempenho que um objeto em Java (ou em outras linguagens orientadas a objetos) introduz em comparação com tipos de dados primitivos.

Exemplo de tipos primitivos em Java:

int numeroInteiro = 10;
double numeroDecimal = 20.5;
boolean isAtivo = true;
Enter fullscreen mode Exit fullscreen mode

2. O que são Classes Invólucras (Wrapper Classes)?

As classes invólucras, ou wrapper classes, são classes em Java que "envolvem" tipos primitivos, transformando-os em objetos. Cada tipo primitivo tem uma classe correspondente que oferece métodos e funcionalidades adicionais para manipulação de valores.

Aqui estão as classes invólucras correspondentes aos tipos primitivos:

  • byteByte
  • shortShort
  • intInteger
  • longLong
  • floatFloat
  • doubleDouble
  • charCharacter
  • booleanBoolean

Essas classes são úteis quando você precisa de funcionalidades adicionais ou quando um valor primitivo precisa ser tratado como um objeto, por exemplo, quando estamos trabalhando com coleções como listas (List) ou mapas (Map), que exigem objetos em vez de tipos primitivos.

Exemplo de uso de classes invólucras:

Integer numeroInteiro = 10; // Tipo objeto
Double numeroDecimal = 20.5; // Tipo objeto
Boolean isAtivo = true; // Tipo objeto
Enter fullscreen mode Exit fullscreen mode

3. Diferenças Entre Tipos Primitivos e Classes Invólucras

Característica Tipos Primitivos Classes Invólucras
Armazenamento Diretamente no valor Armazenado como um objeto
Eficiência Mais eficientes Menos eficientes
Uso em coleções Não pode ser usado Pode ser usado (ex: List<Integer>)
Valores padrão Inicializado com um valor (ex: 0 para int) Pode ser null (ausência de valor)
Métodos adicionais Não possui métodos Oferece métodos como parseInt(), valueOf(), etc.

4. Quando Usar Tipos Primitivos e Classes Invólucras?

Embora os tipos primitivos sejam mais eficientes em termos de desempenho, as classes invólucras são necessárias quando você precisa de funcionalidades adicionais, como:

  • Coleções: Quando estiver usando coleções como List, Set, ou Map, que só podem armazenar objetos, você precisará usar as classes invólucras. Exemplo:
List<Integer> lista = new ArrayList<>();
lista.add(10);  // Transformando o int 10 em Integer
Enter fullscreen mode Exit fullscreen mode
  • Operações Específicas: Se precisar de métodos específicos para conversão ou manipulação, como Integer.parseInt(), você deve usar a classe invólucra.

5. Conclusão

Compreender a diferença entre tipos primitivos e classes invólucras é fundamental para qualquer programador iniciante em Java, pois afeta tanto o desempenho quanto a maneira como lidamos com dados no dia a dia. Lembre-se de que, para otimizar o desempenho, sempre que possível, use os tipos primitivos. Porém, quando precisar de funcionalidades extras, como trabalhar com coleções ou lidar com valores nulos, as classes invólucras são a escolha certa.

Com o tempo, à medida que você for se aprofundando no Java, a compreensão desses conceitos ajudará a escrever código mais eficiente e flexível.

Top comments (0)