Integer.class和int.class

时间:2012-02-04 08:14:37

标签: java

这个Java语句如何在没有警告的情况下编译?

Class<Integer> x = int.class;

即使

Integer.class != int.class

修改:以不同的方式,似乎Integer.classint.class没有任何共同点(请参阅下面的评论),为什么它有意义呢?这项任务可能吗?

3 个答案:

答案 0 :(得分:6)

经过大量搜索,我在JLS中看到了这个小片段,section 15.8.2 Class Literals

  

如果p是基本类型的名称,则让B为装箱转换后的类型p的类型(第5.1.7节)。那么p.class的类型是Class&lt; B&gt;。

规范并没有解释为什么会这样,而不是Class<?>。我也未能找到任何证据证明这与仿制药或自动装箱有关。

Integer是一流的对象,而int是基本类型,Class的大多数方法,例如isInstanceisAssignableFrom和{{对cast s进行操作的1}}在Object的上下文中无效。因此,我认为没有任何理由说明int.class的类型为int.class

答案 1 :(得分:4)

由于autoboxing。您不能在类型参数中使用原语,因此原语被装入包装器。

答案 2 :(得分:4)

我不相信这与自动装箱有任何关系。

这是泛型规则的一部分,它将原始类型视为包装器。