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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵阳 中级黑马   /  2012-9-4 20:58  /  2655 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵阳 于 2012-9-5 14:28 编辑

        System.out.println(double.class==int.class);

这个为什么编译不通过啊,哪里错


那为什么这个可以通过啊
Class cls1=double.class;
  Class cls2=int.class;
  System.out.println(cls1==cls2);
这个为什么可以通过啊

10 个回复

倒序浏览
本帖最后由 孙沛 于 2012-9-4 21:18 编辑

double.class和int.class不兼容的,不能判断是否相等的
System.out.print(double.class);//打印double
System.out.print(int.class);//打印int
基本数据类型不同不能比较的,判断==是否相等其实是建立在两者是否是相同数据类型的基础上的
回复 使用道具 举报
这里比较的应该是基本类型封装类的字节码,编译器本身对于明显的错误,当然不能编译了
回复 使用道具 举报
jdk1.4版本是可以通过的,jdk版本提升,编译器检查的范围也增多了,明显类型不一样的就不在运行时判断了。
楼主该先在论坛里搜索,这问题我都回答3次了。。
回复 使用道具 举报
简单的事儿,double 与int 分属于不同的基本数据类型,它们的内容==与否就不可比较,官方话叫不相容。
    system.out.println(double.class);的结果是--double
      system.out.println(double.class);的结果是--int
回复 使用道具 举报
楼主提出的问题确实,我也没太注意,不过刚才用System.out.println(double.class.equals(int.class));试了一下,编译时通过,结果显然是false。
用equals来做一下测试还是可以的。
回复 使用道具 举报
舒远 发表于 2012-9-5 12:53
楼主提出的问题确实,我也没太注意,不过刚才用System.out.println(double.class.equals(int.class));试了 ...

        Class cls1=double.class;
                Class cls2=int.class;
                System.out.println(cls1==cls2);
这个为什么可以通过啊
回复 使用道具 举报
张飞年 发表于 2012-9-5 01:06
简单的事儿,double 与int 分属于不同的基本数据类型,它们的内容==与否就不可比较,官方话叫不相容。
     ...

那为什么这个可以通过啊

Class cls1=double.class;
                Class cls2=int.class;
                System.out.println(cls1==cls2);
这个为什么可以通过啊
回复 使用道具 举报
Among the facilities provided by the System class are standard input, standard output, and error output streams; access to externally defined properties and environment variables; a means of loading files and libraries; and a utility method for quickly copying a portion of an array.

Since:
JDK1.0
其中的设施,提供系统级标准输入,标准输出和错误输出流,;访问外部定义的性质和环境变量;一种手段加载文件和库;和实用方法快速复制数组的一部分。自:JDK 1.0
说明不是标准输入!!
回复 使用道具 举报
舒远 黑马帝 2012-9-5 14:41:22
10#
邵阳 发表于 2012-9-5 14:27
Class cls1=double.class;
                Class cls2=int.class;
                System.out.println(cls1==cls2);

这个编译器在编译期只能知道cls1的类型是Class,cls2的类型也是Class,所以cls1和cls2这两个变量编译器会认为是类型相同的,编译自然能通过。
回复 使用道具 举报
邵阳 发表于 2012-9-5 14:28
那为什么这个可以通过啊

Class cls1=double.class;

这样又转回到了class类型了,基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 都为 Class 对象。double与int为两种不同class对象,比较结果假。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马