黑马程序员技术交流社区

标题: 关于反射字节码比较问题 [打印本页]

作者: 曹冬明    时间: 2014-4-20 00:50
标题: 关于反射字节码比较问题
  1. int[] a1 = new int[3];
  2.                 int[] a2 = new int[4];
  3.                 int[][] a3 = new int[2][3];
  4.                 String[] a4 = new String[4];
  5.                
  6.                 System.out.println(a1.getClass() == a2.getClass());
  7.                 System.out.println(a1.getClass() == a4.getClass());
  8.                 System.out.println(a1.getClass() == a4.getClass());
复制代码


为什么我看张老师的视频就可以编译通过,我的就不行呢,报这个异常
Incompatible operand types Class<capture#4-of ? extends int[]> and Class<capture#5-of ? extends String[]>
        Incompatible operand types Class<capture#6-of ? extends int[]> and Class<capture#7-of ? extends String[]>

作者: 悠然丶    时间: 2014-4-20 09:37
本帖最后由 悠然丶 于 2014-4-20 09:45 编辑

        int[] a1 = new int[3];
        int[] a2 = new int[4];
        int[][] a3 = new int[2][3];
        String[] a4 = new String[4];
      
        System.out.println(a1.getClass() == a2.getClass());
        System.out.println(a1.getClass().equals( a4.getClass()));//把==改成equals就可以了,你的a4是String[]类型的.不能直接比较
        System.out.println(a1.getClass().equals(a4.getClass()));
作者: 曹冬明    时间: 2014-4-20 15:05
悠然丶 发表于 2014-4-20 09:37
int[] a1 = new int[3];
        int[] a2 = new int[4];
        int[][] a3 = new int[2][3];

我比较的是字节码,而且张孝祥老师在视频里就这样用的,没问题,我就有问题
作者: NewDemo    时间: 2014-5-1 10:17
看来很多同学都有这个疑问,那就干脆再复制黏贴过来算了,不知道兄弟你的这个问题是否得到了解决,引用我之前的回答


这是编译报错,你用的比以前的东西高级了,后面两个明显因为是类型都不对,答案是false的就直接编译就报错了
再说明白点,编译器版本高了聪明了,觉得这种问题低级所以不想让你编译通过了
如果希望看到老师视频中讲的那样出现false,照着下面修改下jdk编译器的版本
找到工程文件右键,选择属性properties



然后将编译器调成1.5之前的版本,我这里选了1.4的




最后再来看下,编译通过,运行结果如下






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