Type Casting em Java
TYPE CASTING
├── Implícito (Widening)
├── Explícito (Narrowing)
├── Referência
└── Autoboxing/Unboxing
Casting Implícito
Widening Casting
WIDENING PATH
byte → short → int → long → float → double
char ↗
Exemplos
// Conversões automáticas
byte byteNum = 100;
int intNum = byteNum; // byte para int
int intValue = 10;
double doubleValue = intNum; // int para double
Casting Explícito
Narrowing Casting
NARROWING PATH
double → float → long → int → short → byte
↘ char
Exemplos
// Conversões manuais
double doubleNum = 9.78;
int intNum = (int) doubleNum; // double para int
int largeNum = 130;
byte byteNum = (byte) largeNum; // int para byte
Casting de Referência
Upcasting
// Classe pai para filho
class Animal {}
class Gato extends Animal {}
Animal animal = new Gato(); // Upcast automático
Downcasting
// Filho para pai (requer verificação)
Animal animal = new Gato();
if (animal instanceof Gato) {
Gato gato = (Gato) animal; // Downcast explícito
}
Autoboxing e Unboxing
Autoboxing
// Primitivo para Wrapper
int primitivo = 42;
Integer wrapper = primitivo; // Autoboxing
Unboxing
// Wrapper para primitivo
Integer wrapper = 42;
int primitivo = wrapper; // Unboxing
Verificações de Tipo
instanceof
Object obj = "teste";
if (obj instanceof String) {
String str = (String) obj;
System.out.println(str.length());
}
Pattern Matching (Java 16+)
Object obj = "teste";
if (obj instanceof String str) {
System.out.println(str.length());
}
Conversões Comuns
String Conversions
// String para número
String strNum = "42";
int num = Integer.parseInt(strNum);
double dNum = Double.parseDouble("3.14");
// Número para String
String str1 = String.valueOf(42);
String str2 = Integer.toString(42);
Perda de Dados
Exemplos
// Perda de precisão
int x = 128;
byte b = (byte) x; // Overflow: -128
double pi = 3.14159;
int iPi = (int) pi; // Truncado: 3
Boas Práticas
Recomendações
CASTING GUIDELINES
├── Prefira casting implícito
├── Verifique antes de downcast
├── Evite casting numérico arriscado
└── Use métodos de conversão apropriados
Exemplo Seguro
// Verificação de range
long longValue = 42L;
if (longValue >= Integer.MIN_VALUE &&
longValue <= Integer.MAX_VALUE) {
int intValue = (int) longValue;
}
Casos Especiais
Char Casting
// Char para número
char ch = 'A';
int ascii = ch; // 65
// Número para char
int num = 66;
char character = (char) num; // 'B'
Próximos Passos
Tópicos Relacionados
26 June 2025