无法将java.lang.Integer强制转换为int

时间:2018-01-20 21:05:05

标签: java reflection casting

我对以下Java代码感到困惑,其中我尝试使用两种方法将Object转换为int:

Object o = 1;
System.out.println((int) o);
Class <?> t = int.class;
System.out.println(t.cast(o));

第二行传统上将Object转换为int并成功。然而,第四个,我希望在功能上等同,抛出

Exception in thread "main" java.lang.ClassCastException: Cannot cast java.lang.Integer to int

第二行和第四行之间的功能差异是什么?为什么一个人失败而另一个成功?

1 个答案:

答案 0 :(得分:-1)

Object o = 1;
System.out.println((int) o);

使用这两行代码,您遇到了装箱和拆箱。第一行隐式地将int值1转换为Integer对象。 o被赋予对此对象的引用。这种隐式转换称为装箱。

在第二行,Integer引用的o对象已取消装箱到int,可以投放到int