E aí, pessoal. Beleza?

Nesse artigo iremos ver as variáveis primitivas e os Wrappers, e comparar suas principais diferenças.

Como declarar variáveis no desenvolvimento de software é algo feito todos os dias, se torna necessário conhecer muito bem os tipos e suas diferenças.

Tipos Primitivos

O que afinal é o tipo primitivo?

São os tipos mais básicos de variáveis que o Java possui, sendo eles:

byte – Aceita tipos numéricos inteiros e tem um valor mínimo de -128 e um valor máximo de 127;

char – Aceita tipos caracteres, apenas um caractere e deve estar entre aspas simples, dessa forma char a = ‘A’;

short – Aceita tipos numéricos inteiros e tem valor mínimo de -32.768 e um valor máximo de 32.767;

int – Aceita tipos numéricos inteiros e tem valor mínimo de -2³¹ e um valor máximo de 2³¹-1.

long – Aceita tipos numéricos inteiros e tem valor mínimo de -263  e um valor máximo de 263-1.

float – Aceita dados numéricos com pontos flutuantes e não tem valor mínimo e máximo na documentação – caso queira ver melhor acesse a documentação deixada abaixo;

double – Aceita dados numéricos com pontos flutuantes e não tem valor mínimo e máximo na documentação**;**

boolean – Aceita apenas valores true ou false;

Exemplo:

int numero = 1;

Deixarei também a documentação desses tipos primitivos abaixo:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Agora, com esse conhecimento dos tipos primitivos, nós sabemos que eles são tipos para armazenar valores e nós usamos ou usaremos eles diariamente.

Entretanto, em alguns momentos podemos precisar de algo a mais que apenas armazenar um valor, nós precisamos também de algumas funcionalidades que são extremamente recorrentes como mudar de um tipo para o outro, comparar valores e diversos outros. Por isso, no Java nós também temos as classes Wrappers para nos ajudar nesse quesito de não só armazenar um valor, e sim disponibilizar outras funcionalidades!

Classes Wrappers

As classes Wrappers são como um tipo primitivo, porém “aprimorado”. Na verdade, elas são literalmente classes (objetos instanciáveis) que tem dentro deles um tipo primitivo para armazenar o valor e também muitas outras funcionalidades disponibilizadas pelos métodos.

Contudo, no Java nós temos 8 tipos primitivos e temos um Wrapper para cada tipo primitivo. São eles:

byte – Representado por – Byte

char – Representado por – Character

short – Representado por – Short

int – Representado por – Integer

long – Representado por – Long

float – Representado por – Float

double – Representado por – Double

boolean – Representado por – Boolean

Exemplo: Integer numero = 1;

Em conclusão, note que não muda nada na hora de criar uma variável, o Java faz todo esse trabalho por de baixo dos panos.

Bem como a maioria deles apenas começa com uma letra maiúscula, essa é a diferença do nome do tipo primitivo para as classes Wrappers. Pequeno, não? Mas a diferença deles é realmente maior que só isso.

Os Wrappers são literalmente objetos que possuem um tipo primitivo dentro dele, ou seja, um Integer é um Wrapper do tipo primitivo int. Então, o Wrapper Integer possui um tipo primitivo int dentro dele.

Além disso, os Wrappers nos fornecem diversas funcionalidades, e é exatamente para isso que eles servem.

Não vou entrar em detalhes sobre cada uma dessas funcionalidades, mas temos métodos para compara-los, fazer uma conversão de tipo do valor e muito mais.

Diferença entre Wrapper e Tipos Primitivos

Afinal, qual a diferença de uma Wrapper para um tipo primitivo? Primeiramente, o tipo primitivo serve unicamente para guardar um valor, apenas isso.

Contudo, os Wrappers além de guardarem os valores, fornecem diversas funcionalidades que são essenciais para diversas tarefas do dia a dia do desenvolvedor.

Mas se os Wrappers são mais completos, possuem mais vantagens e funcionalidades, por que ainda usamos os tipos primitivos? A resposta é simples: pelos Wrappers serem objetos, eles consomem mais memória que os tipos primitivos, então, eles afetam o desempenho da sua aplicação.

Agora iremos ver um exemplo de diferença de consumo de memória sobre os tipos primitivos e classes Wrappers.

Por exemplo o uso de memória de cada variável criada com tipo primitivo ou com Wrappers, é uma grande diferença, não? É evidente a diferença, mas não se preocupe, não pare de usar os Wrappers! Eles foram feitos pra isso, essa diferença não é o que vai impactar e deixar sua aplicação lenta, obviamente em uma quantidade aceitável.

Então, tente verificar realmente a necessidade de um Wrapper, caso não seja necessário, use variável do tipo primitivo.

Conclusão

Com esse artigo vocês terão noção de algumas das diferenças dos tipos primitivos e das classes Wrappers. Não é uma comparação totalmente minimalista, mas é um bom ponto de entrada para se policiar sobre algumas más práticas e uso e desperdício de memória.

Espero que tenham compreendido essa diferença e agregado ao seu conhecimento.

Grande abraço, até a próxima!

Veja também…

Métodos Em Java

Arquitetura Hexagonal Simplificada