簡體   English   中英

Integer.class和int.class

[英]Integer.class and int.class

這個Java語句如何在沒有警告的情況下編譯?

Class<Integer> x = int.class;

即使

Integer.class != int.class

編輯:以不同的方式,似乎Integer.classint.class沒有任何共同點(見下面的評論),那么為什么這個賦值可能有意義呢?

經過大量的搜索,我在JLS 第15.8.2節文字中看到了這個小片段:

如果p是基本類型的名稱,則讓B為裝箱轉換后的類型p的類型(第5.1.7節)。 那么p.class的類型是Class <B>。

規范沒有解釋為什么會這樣,而不是例如Class<?> 我也無法找到任何證據證明這與仿制葯或自動裝箱有關。

Integer是第一類對象,而int是原始類型,並且大多數方法ClassisInstanceisAssignableFromcast其上操作Object s為在的上下文無效int.class 因此,我沒有看到任何理由為什么int.class的類型是Class<Integer>

由於自動裝箱 您不能在基本類型參​​數中使用基元,因此基元會被裝入包裝器中。

我不相信這與自動裝箱有任何關系。

這是泛型規則的一部分,它將原始類型視為包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM