Integer.class和int.class

cas*_*nca 9 java

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

Class<Integer> x = int.class;
Run Code Online (Sandbox Code Playgroud)

即使

Integer.class != int.class
Run Code Online (Sandbox Code Playgroud)

编辑:以不同的方式,似乎Integer.classint.class没有任何共同点(见下面的评论),那么为什么这项任务可能有意义呢?

cas*_*nca 7

经过大量的搜索,我在JLS 第15.8.2节文字中看到了这个小片段:

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

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

Integer是第一类对象,而int是原始类型,并且大多数方法ClassisInstance,isAssignableFromcast其中上操作Objects为在的上下文无效int.class.因此,我看不出有任何理由的类型int.classClass<Integer>.