黑马程序员技术交流社区

标题: Class类 [打印本页]

作者: 邵阳    时间: 2012-9-4 20:58
标题: Class类
本帖最后由 邵阳 于 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);
这个为什么可以通过啊

作者: 孙沛    时间: 2012-9-4 21:12
本帖最后由 孙沛 于 2012-9-4 21:18 编辑

double.class和int.class不兼容的,不能判断是否相等的
System.out.print(double.class);//打印double
System.out.print(int.class);//打印int
基本数据类型不同不能比较的,判断==是否相等其实是建立在两者是否是相同数据类型的基础上的

作者: 武庆东    时间: 2012-9-4 21:14
这里比较的应该是基本类型封装类的字节码,编译器本身对于明显的错误,当然不能编译了

作者: 曹恒业    时间: 2012-9-4 23:39
jdk1.4版本是可以通过的,jdk版本提升,编译器检查的范围也增多了,明显类型不一样的就不在运行时判断了。
楼主该先在论坛里搜索,这问题我都回答3次了。。
作者: 张飞年    时间: 2012-9-5 01:06
简单的事儿,double 与int 分属于不同的基本数据类型,它们的内容==与否就不可比较,官方话叫不相容。
    system.out.println(double.class);的结果是--double
      system.out.println(double.class);的结果是--int
作者: 舒远    时间: 2012-9-5 12:53
楼主提出的问题确实,我也没太注意,不过刚才用System.out.println(double.class.equals(int.class));试了一下,编译时通过,结果显然是false。
用equals来做一下测试还是可以的。
作者: 邵阳    时间: 2012-9-5 14:27
舒远 发表于 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 14:28
张飞年 发表于 2012-9-5 01:06
简单的事儿,double 与int 分属于不同的基本数据类型,它们的内容==与否就不可比较,官方话叫不相容。
     ...

那为什么这个可以通过啊

Class cls1=double.class;
                Class cls2=int.class;
                System.out.println(cls1==cls2);
这个为什么可以通过啊
作者: 田旭阳    时间: 2012-9-5 14:32
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
邵阳 发表于 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 23:08
邵阳 发表于 2012-9-5 14:28
那为什么这个可以通过啊

Class cls1=double.class;

这样又转回到了class类型了,基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 都为 Class 对象。double与int为两种不同class对象,比较结果假。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2