我对以下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
第二行和第四行之间的功能差异是什么?为什么一个人失败而另一个成功?
答案 0 :(得分:-1)
Object o = 1;
System.out.println((int) o);
使用这两行代码,您遇到了装箱和拆箱。第一行隐式地将int
值1转换为Integer
对象。 o
被赋予对此对象的引用。这种隐式转换称为装箱。
在第二行,Integer
引用的o
对象已取消装箱到int
,可以投放到int
。