黑马程序员技术交流社区

标题: 数组反射中问题 [打印本页]

作者: 杜超    时间: 2013-4-11 15:53
标题: 数组反射中问题
本帖最后由 杜超 于 2013-4-14 14:37 编辑

比较的是字节码 ,为什么会出现类型不兼容提示呢?

System.out.println(a1.getClass()==a4.getClass());
错误提示:操作数类型 Class<capture#8-of ? extends int[]> 和 Class<capture#9-of ? extends String[]> 不兼容
System.out.println(a1.getClass()==a3.getClass());
错误提示:操作数类型 Class<capture#10-of ? extends int[]> 和 Class<capture#11-of ? extends int[][]> 不兼容

1.jpg (43.27 KB, 下载次数: 107)

1.jpg

作者: 932759732    时间: 2013-4-11 19:31
int [] a1= new int [3];  是一个int类型的一维数组,然后其中有3个元素。
int[][]a2 = new int[2][3]; 是一个int类型的二维数组,其中的元素为2个包含3个元素的数组。
String[] a4 = new String[3]; 是一个String类型的一维数组,其中有3个元素;

一维数组和二维数组之间本身就是没有可比性的。
关于a1为什么不等于a4我揣测是因为数据类型不一样,所以没有可比性。


作者: 杜超    时间: 2013-4-11 20:33
杨玄文 发表于 2013-4-11 19:31
int [] a1= new int [3];  是一个int类型的一维数组,然后其中有3个元素。
int[][]a2 = new int[2][3]; 是 ...

a1.getClass()==a3.getClass()
a1.getClass()==a4.getClass()
这两个比较是字节码,比较字节码和类型没有关系吧,
我这个是按视频里敲得,老师的没问题,我的编译不过去,所以就郁闷了
作者: 932759732    时间: 2013-4-12 06:18
杜超 发表于 2013-4-11 20:33
a1.getClass()==a3.getClass()
a1.getClass()==a4.getClass()
这两个比较是字节码,比较字节码和类型没有 ...

老师那个也没编译过去,直接编译器就报错。

我专门翻回去看过的。
作者: 杜超    时间: 2013-4-12 09:10
杨玄文 发表于 2013-4-12 06:18
老师那个也没编译过去,直接编译器就报错。

我专门翻回去看过的。

刚开始是没编过去,开始老师直接对象比较了,System.out.println(a1==a4);System.out.println(a1.=a3);,这比较的是对象,不是一个类型,编译不过去,后来才加上的getClass,比较的字节码,才编译过去的

你看下面的截图,这是老师后来改的,


原图.jpg (217.07 KB, 下载次数: 110)

视频截图

视频截图

作者: 黄玉昆    时间: 2013-4-14 14:28
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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