黑马程序员技术交流社区

标题: 对比字节码问题, [打印本页]

作者: 茶念小手    时间: 2013-8-10 10:18
标题: 对比字节码问题,
为什么编译不能通过啊
  1. int[][] i = new int[2][2];
  2.                 String[] strings = new String[3];
  3.                
  4.                 System.out.println(i.getClass()==strings.getClass());
  5.                 System.out.println(int[].class==String.class);
复制代码

作者: 李江    时间: 2013-8-10 11:28
对象类型不可比较啊,你可以单独打印i.getClass()    strings.getClass()    int[].class    String.class  看看他们是什么类型
作者: 钟佩桓    时间: 2013-8-10 12:31
System.out.println(i.getClass()==strings.getClass());    i是一个二位数组 Strings是一个一维数组   维数不一样 编译器会直接报错  就算维数一样 还要看数组的元素个数是否一样   具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。   
int[] 和 String的父类都是Object   所以比较父类的字节码可以 但是直接比较不行 编译器会报错 一个int型数组和String比较字节码是不行的  这样写编译器不会报错  
System.out.println(int[].class.getSuperclass() == String.class.getSuperclass()); 结果为true
作者: masterV    时间: 2013-8-12 01:11
Incompatible operand types 不匹配的类型。
这两个操作数根本就不是一个类型,不具有比较性。
i.getClass()得到的应该为int[][].class
strings.getClass()得到的应该是String[].class
至于第二个输出语句更不用说了,int[].class和String.class根本就是两个类型的字节码文件,怎么会具有可比性呢。
与君共同进步
作者: 吴光新    时间: 2013-8-12 02:26
strings是一个类类型,而int是一个基本数据类型,所以他们不能用双等号比较,但可以通过equalse把他们作为对象进行比较。

我醉了,胡言乱语,不要相信
作者: 以防万一    时间: 2013-8-13 22:21
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作




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