黑马程序员技术交流社区

标题: 在eclipse中不能编译通过,数组反射 [打印本页]

作者: 黄玉昆    时间: 2013-3-16 11:13
标题: 在eclipse中不能编译通过,数组反射
本帖最后由 黄玉昆 于 2013-3-16 11:26 编辑
  1. public static void arrayTest()throws Exception {
  2.                 int[] a1 = new int[3];
  3.                 int[] a2 = new int[4];
  4.                 int[][] a3 = new int[2][3];
  5.                 String[] a4 = new String[3];
  6.                
  7.                 System.out.println(a1.getClass() == a2.getClass());
  8.                 //System.out.println(a1.getClass() == a4.getClass());
  9.                 //System.out.println(a1.getClass() == a3.getClass());
  10.                
  11.         }
复制代码
其中注释的那两句会报错,提示
操作数类型 Class<capture#12-of ? extends int[]> 和 Class<capture#13-of ? extends String[]> 不兼容
但是我看张老师的视频就能编译成功,是不是我这写的有什么错误呢?求解

作者: 刘军亭    时间: 2013-3-16 11:22
可以用equals试试. == 的比较也许jdk高版本的用到泛型,把问题弄到了编译时期.
作者: 黄玉昆    时间: 2013-3-16 11:25
刘军亭 发表于 2013-3-16 11:22
可以用equals试试. == 的比较也许jdk高版本的用到泛型,把问题弄到了编译时期.

果然管用,谢谢
作者: 刘军亭    时间: 2013-3-16 11:28
黄玉昆 发表于 2013-3-16 11:25
果然管用,谢谢

客气了,以前我也这样写的,但是现在这样写直接就编译出错.说实话这只是我猜的,具体怎么回事期待高手回答哦
作者: 孙晋学    时间: 2013-3-16 11:53
==在判断引用类型的时候,比较的两个值必须在一个继承树上。
  比如 new Animal() == new Cat();//编译合法
         new Cat() == new Dog();//编译报错
错误提示中指明了一个extends int[],一个extends String[],不具有继承关系
感觉可以强制转换成Object类型试试


作者: 黄玉昆    时间: 2013-3-16 12:36
孙晋学 发表于 2013-3-16 11:53
==在判断引用类型的时候,比较的两个值必须在一个继承树上。
  比如 new Animal() == new Cat();//编译合法 ...

只是有点不明白,为什么同样是Class类型的字节码对象,为什么就不能比较呢?
作者: 孙晋学    时间: 2013-3-16 14:27
黄玉昆 发表于 2013-3-16 12:36
只是有点不明白,为什么同样是Class类型的字节码对象,为什么就不能比较呢? ...

==比较的时候,两者要有继承关系的。比如new Cat() == new Dog();比较没有什么意义啊
作者: 黄玉昆    时间: 2013-3-16 15:37
孙晋学 发表于 2013-3-16 14:27
==比较的时候,两者要有继承关系的。比如new Cat() == new Dog();比较没有什么意义啊 ...

你说的这个不是一个类型的,当然不行了,但是我说的那个都是Class类型的,为什么就没有意义呢?




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