A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-1-13 16:17  /  1332 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到反射中的视频,
System.out.println(int.class ==Integer.class);
Integer.class 我能理解,Integer是基本数据类型的封装类,他用到反射时会产生自己的一份字节码,
但是,int只是一个基本数据类型又不是一个类,int.class 怎么去理解?
他的这份字节码是如何产生的?
在Integer中可以使用字段,Integer.TYPE返回int的Class实例,也就是int.class ,这里的int.class,,Integer.class两者的关系是怎么样?

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
      int.class是Class对象的引用,严格来说是原始类型int的Class对象引用。举一个简单的例子,假设你自己建立了一个Dog类,那么Dog.class就是Dog类型的Class对象引用。每一个类加载之后,类加载器会给建立Class对象,你可以用Class.forName()方法取得该对象的引用,比如,Class<Dog> d = Class.forName("Dog");其中d就是Dog的Class对象的引用。同时,你也可以用Class<Dog> d = Dog.class;来获取Dog的Class对象的引用。其实Dog.class本身就是引用。
    int.class是int类型的Class对象引用。int类型是原始类型,JVM运行时,int类型Class对象已经建立,那么如何获取该对象的引用呢?就是用int.class。另外一种方法是用Integer.TYPE静态成员变量来获取。
    二者的区别:int.class是一个引用,注意是一个引用,而不是类;Integer是int类型的包装类,注意是一个类,而不是引用。
回复 使用道具 举报
int.class就是表示int类型的Class对象
每个类型都有一个自己类型的Class对象,API中java.lang.Class<T>类的描述中有说明。int.class编译时产生的。
int.class是基本类型的字节码,Integer.class是int封装类的字节码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马