| 特性 | ClassCastException | 編譯期「不兼容的類型」 |
|---|---|---|
| 發現階段 | 運行時 | 編譯時 |
| 錯誤性質 | 異常(Exception) | 編譯錯誤 |
| 典型場景 | 向下轉型失敗 | 賦值類型不匹配 |
| 可否通過編譯 | 是 | 否 |
Object obj = "Hello"; // 實際是 String
Integer num = (Integer) obj; // 運行時拋出 ClassCastException
// 方式 1:instanceof 檢查
if (obj instanceof Integer) {
Integer num = (Integer) obj;
}
// 方式 2:Java 16+ 模式匹配
if (obj instanceof Integer num) {
// 直接使用 num
}
// 方式 3:Try-Catch 兜底(不推薦常規流程)
try {
Integer num = (Integer) obj;
} catch (ClassCastException e) {
// 處理異常
}
Integer num = "Hello"; // 編譯直接報錯:不兼容的類型
List list = new ArrayList(); // 泛型不兼容
編譯器根據靜態類型信息判斷賦值兼容性,屬於靜態類型檢查機制。