Java/Fundamentos/Tipos Primitivos e Não Primitivos
Java⏱ ~2 min de leitura

Tipos Primitivos e Não Primitivos

int, double, String e a diferença entre eles

Java separa os tipos em dois grupos. Tipos primitivos são armazenados diretamente na memória stack e incluem: int, long, double, float, boolean, char, byte e short. Eles não são objetos — são valores puros e têm tamanho fixo em bytes.

Tipos não primitivos (ou de referência) são objetos armazenados na heap, e a variável guarda apenas o endereço de memória onde o objeto está. Os principais são: String, Integer, Double, Boolean (wrappers dos primitivos), arrays e qualquer classe definida pelo usuário.

A distinção importa na prática: primitivos são copiados por valor (int b = a copia o número), enquanto objetos são copiados por referência (Object b = a faz ambas as variáveis apontarem para o mesmo objeto na heap). O Java faz autoboxing automaticamente, convertendo entre primitivos e wrappers conforme necessário.

Exemplo.java
// ── Tipos Primitivos ─────────────────────────────
int idade = 25;             // 32 bits, -2bi a 2bi
long populacao = 8_000_000_000L; // 64 bits (L obrigatório)
double preco = 99.90;       // ponto flutuante 64 bits
float taxa = 0.05f;         // ponto flutuante 32 bits (f obrigatório)
boolean ativo = true;       // true ou false
char inicial = 'J';         // caractere único (aspas simples)
byte nivel = 127;           // -128 a 127

// ── Tipos Não Primitivos ─────────────────────────
String nome = "Maria";          // classe, não primitivo
Integer numero = 42;            // wrapper de int
int[] notas = {8, 9, 7, 10};  // array é um objeto

// ── Autoboxing / Unboxing ────────────────────────
int x = 10;
Integer y = x;    // autoboxing: int → Integer (automático)
int z = y;        // unboxing:   Integer → int  (automático)

// ── Diferença crucial: primitivo vs referência ───
int a = 5;
int b = a;     // copia o VALOR
b = 99;
System.out.println(a); // 5 — inalterado!
💡 Dica pro

Use tipos primitivos por padrão para performance. Use os wrappers (Integer, Double…) quando precisar de null ou ao usar Collections, pois List<int> não existe — deve ser List<Integer>.

Recompensa+20 XP+exercícios