Aula 03 - 📦 Tipos Primitivos¶
Os tipos primitivos são a base para manipulação de dados simples em Java. Nesta aula, exploraremos seus usos, limitações e novidades no Java 24+.
📌 O Que São Tipos Primitivos?¶
São tipos de dados não objetos que armazenam valores diretamente na memória. Java possui 8 tipos primitivos:
| Tipo | Tamanho (bits) | Valor Padrão | Exemplo |
|---|---|---|---|
byte |
8 | 0 | byte idade = 25; |
short |
16 | 0 | short codigo = 100; |
int |
32 | 0 | int populacao = 2_147_483_647; |
long |
64 | 0L | long estrelas = 9_223_372L; |
float |
32 | 0.0f | float preco = 19.99f; |
double |
64 | 0.0d | double pi = 3.1415926535; |
char |
16 | '\u0000' | char letra = 'A'; |
boolean |
1 (aproximado) | false | boolean ativo = true; |
Conversão Automática¶
flowchart LR
A[byte] --> B[short]
B --> C[int]
C --> D[long]
D --> E[float]
E --> F[double]
G[char] --> C[int]
H[boolean]
style A fill:#f9f,stroke:#333
style B fill:#9f9,stroke:#333
style C fill:#9f9,stroke:#333
style D fill:#9f9,stroke:#333
style E fill:#9f9,stroke:#333
style F fill:#9f9,stroke:#333
style G fill:#f99,stroke:#333
style H fill:#999,stroke:#333
🆕 Novidades no Java 24+¶
1. Underscores em Literais Numéricos¶
Melhora a legibilidade de números grandes:
int milhao = 1_000_000; // Java 7+
double hexBytes = 0xFF_EC_DE_5E; // Válido
2. Inferência com var (Java 10+)¶
Embora var não seja aplicável a tipos primitivos diretamente, funciona com literais:
var numero = 10; // int
var saldo = 1500.50; // double
3. Boxing/Unboxing Automático¶
Conversão automática entre primitivos e wrappers (ex: int ↔ Integer):
Integer codigo = 200; // Autoboxing
int valor = codigo; // Unboxing
⚠️ Cuidados e Boas Práticas¶
1. Divisão Inteira¶
int resultado = 5 / 2; // Resultado: 2 (não 2.5!)
2. Precisão com float e double¶
Evite comparações diretas:
double a = 0.1 + 0.2;
System.out.println(a == 0.3); // false! (0.30000000000000004)
3. Cast Explícito¶
double valorDouble = 10.5;
int valorInt = (int) valorDouble; // 10 (trunca decimais)
🧪 Exemplo Prático¶
public class TiposPrimitivos {
public static void main(String[] args) {
// Declarações modernas
var temperatura = 23.5f; // float
var letraUnicode = '\u0041'; // char 'A'
// Operações
int divisao = (int) (temperatura / 2);
System.out.println("Divisão truncada: " + divisao); // 11
// Autoboxing em coleções
List<Integer> numeros = new ArrayList<>();
numeros.add(42); // Autoboxing de int para Integer
}
}
📚 Resumo¶
- Use
intedoublepara a maioria dos casos. - Prefira
varquando a inferência for clara. - Evite
floatpara cálculos precisos (useBigDecimal). - Atualize código legado para usar underscores em literais grandes.
admonition info "Dica"
Use wrappers (`Integer`, `Double`) quando precisar armazenar valores nulos ou usar coleções genéricas!
🔍 Exercícios¶
- Qual o resultado de
System.out.println((10 / 3) * 3);? - Declare uma variável
longpara armazenar o número de grãos de areia na Terra (~7.5 quintilhões). - Por que
0.1 + 0.2 != 0.3em Java?