int.class是什么意思



在java中,int、float等都是基元类型。包装类是在我们需要将其与泛型一起使用的情况下使用的。但是以下声明仍然适用于java、

 Class<Integer> intClass=int.class

即使int.class是一个基元类型,我们怎么能调用它呢?

成为对象的基元

对于基元,在相应的包装类中有可用的Class对象作为名为TYPE的常量,即int.Class被更改为java.lang.Integer.TYPE。对于其他类型,编译器在正在编译的类中创建一个私有成员变量来保存Class对象,并使用Class.forName()生成代码来初始化该成员。

发现一些讨论

这里有一个很好的讨论,你的例子也包含在这个链接中。

几句话:

类怎么可能是基元?让我们再把事情弄糊涂一点。我们可以通过编码来访问表示已定义类的Class对象,比如:

Equation.class // returns the Equation Class object

但是,我们也可以说:

int.class

获取名称为"int"的Class对象。请注意,我们还没有将getClass()方法发送到对象;我们使用了内置基元类型(int)的保留字,并使用点表示法访问了它的类"field"。这将返回一个class对象!

int.class根据规范与Class<Integer>类型相同。

来自文档:

原始Java类型(boolean、byte、char、short、int、long、,float和double),以及关键字void也表示为Class对象。

来自JLS 15.8.2:

15.8.2.类文字

类文字是由类的名称组成的表达式,接口、数组或基元类型,或伪类型void,后跟由一个"。"以及令牌类。

C.class的类型,其中C是类、接口或数组类型为Class<C>

p类的类型,其中p是基元类型的名称,是Class<B>,其中B是在装箱转换

void.class的类型为Class<Void>

如果命名类型是类型变量,则是编译时错误或参数化类型或元素类型为类型变量或参数化类型。

如果命名类型不表示类型,则是编译时错误在类文字出现。

类文字的计算结果为命名类型的class对象(或用于void),由类的定义类加载器定义当前实例的。

类文字是一个表达式,由类、接口、数组或基元类型的名称或伪类型void组成,后跟"."以及令牌类。

  1. 枚举是一种类,注释是一种接口
  2. 每个数组也属于一个类,该类反映为3共享的class对象。具有相同元素类型和维数的所有数组
  3. 原始Java类型(boolean、byte、char、short、int、long、float和double),以及
  4. 关键字void也是

表示为Class对象。

因此System.out.println(int.class);将打印int,而System.out.println(Integer.class);将打印class java.lang.Integer

最新更新