黑马程序员技术交流社区

标题: 关于数组的反射 [打印本页]

作者: 蓝迪    时间: 2012-9-14 10:26
标题: 关于数组的反射
本帖最后由 蓝迪 于 2012-9-14 10:37 编辑

//数组的反射
  int[] a1 = new int[3];
  int[] a2 = new int[4];
  int[][] a3 = new int[2][3];
  String[] a4 = new String[3];
  System.out.println(a1.getClass() == a2.getClass());
  System.out.println(a1.getClass() == a3.getClass());//后面这两句报错
  System.out.println(a1.getClass() == a4.getClass());//
我用的是eclipse,后面这两句报错,分别是
Incompatible operand types Class<capture#8-of ? extends int[]> and
Class<capture#9-of ? extends int[][]>
Incompatible operand types Class<capture#10-of ? extends int[]> and
Class<capture#11-of ? extends String[]>
都是不兼容的操作数类型,为什么会有报错啊,都已经是对象调用getClass()方法来获取字节码
判断的也就是字节码是否相同了,为什么还有这个报错
图为



作者: 李宁    时间: 2012-9-14 10:34
==是对相同的数据类型作比较的,比如int和int类型作比较,String和String作比较
你说的后面两句根本就不是相同的类型,编译时会提醒你无法做比较
作者: 蓝迪    时间: 2012-9-14 10:42
是jdk版本的问题,根据版主的提醒,去搜了以前的帖子,上面有说是因为
现在的版本 一个int型一维数组的class对象不能直接与int型多维数组的class对象或者一个string类型的class对象直接进行比较吧
所以遇到这个问题的朋友,把代码改为
System.out.println((a1.getClass()). equals (a3.getClass()));
System.out.println((a3.getClass()). equals (a4.getClass()));               
作者: 朱烈葵    时间: 2012-9-14 10:55
这个我也不清楚,我只是知道换成equals就可以了,我也很想知道这个问题




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