Object d = 4; // 自動裝箱為 Integer
String g = (String)d; // 執行期拋出 ClassCastException
Object d 實際指向 Integer 物件。Java 強制轉型要求物件實際型別必須是目標型別或其子類別。Integer 與 String 無繼承關係,故無法轉換。
| 需求 | 寫法 | 說明 |
|---|---|---|
| 任意物件 → 字串 | String s = String.valueOf(obj); | null 安全,回傳 "null" |
| 已知為 String 物件 | String s = (String) obj; | 需確保實際型別為 String |
| 數值 → 字串 | String s = Integer.toString(num); | 或 String.valueOf(num) |
Object
├── String
├── Integer
├── Double
└── ...
只有同一分支(如 Object → String)才能向下轉型。Integer 無法轉為 String,正如「指鹿為馬」。
Integer t = 4;
Object o = t; // 向上轉型:子類 → 父類,安全
String s = String.valueOf(o); // 正確取得 "4"
編譯通過 ≠ 執行安全。Object 參考可指向任何子類,但強制轉型必須符合實際型別。轉字串請用 String.valueOf() 或 toString(),避免直接 Cast。