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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿凡提不买驴 中级黑马   /  2013-8-1 22:58  /  1100 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿凡提不买驴 于 2013-8-4 12:20 编辑

System.out.println(int.class.isPrimitive());
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE);
这三者之间有啥区别?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

5 个回复

倒序浏览
System.out.println(int.class.isPrimitive());  // 判断是不是基本数据类型  true

System.out.println(int.class==Integer.class);  //基本数据类型跟封装类型不等... false

System.out.println(int.class==Integer.TYPE);  //由于不等, 所以Inter提供了一个int的基本类型实例, 叫做Integer.Type  所以是true

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
System.out.println(int.class.isPrimitive());   判断是不是基本数据类型  
System.out.println(int.class==Integer.class);  基本数据类型跟封装类型不相等
System.out.println(int.class==Integer.TYPE); Integer.TYPE代表的是它所包含的那个基本类型的字节码,所以就相等了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
先说一下Class类吧。我们用到的类不是都被加载到方法区了吗,在内存中,那么就会被解析成二进制代码,也成为字节码,而Class类指的就是该类对应的字节码。
System.out.println(int.class.isPrimitive());//将int对应的字节码与八个基本数据类型和void类型对应的字节码相比较,只要和其中一个相等,就返回true;多不一样的话,则返回false。相当于查看元素是否属于集合,此处属于集合,所以为true。
System.out.println(int.class==Integer.class);//因为基本数据类型int和Integer类不是同一个类型,所以会被解析为不同的字节码。所以打印结果为false。
System.out.println(int.class==Integer.TYPE);//基本数据类型对应的类类型基本上都有对应的成员变量或方法TYPE类返回其基本数据类型对应的字节码。我感觉也许就是为了反射用的吧。所以为true。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
首先.class是获取字节码的方法,基本的 Java 类型int和包装类Integer的字节码是不同的所以int.class==Integer.class是不同的,打印为false。
Integer.TYPE 解释 .TYPE是Integer的静态字段表示基本类型 int 的 Class 实例,返回Class<Integer>,int.class==Integer.TYPE是相同的打印为true。
int.class.isPrimitive()中isPrimitive()是Class类当中的一个方法 判定指定的 Class 对象是否表示一个基本类型。int是一个基本类型,打印出来为true。

可以参考jdk API 文档

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
好的,O(∩_∩)O谢谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马