黑马程序员技术交流社区

标题: 为何视频中没事儿 我这就报错 [打印本页]

作者: 曹文涛    时间: 2011-9-14 15:11
标题: 为何视频中没事儿 我这就报错
[code=java]public static void main(String[] args) throws Exception{
                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());
                System.out.println(a1.getClass().equals(a3.getClass()));
                System.out.println(a1.getClass().equals(a4.getClass()));
}[/code]7、8行 报错呀 完全按照张老师的视频中打的,但改成9、10行就没事儿。

24_黑马程序员_张孝祥_Java基础加强_数组与Object的关系及其反射类型
作者: 王建武    时间: 2011-9-14 15:53
  1.                 System.out.println(a1.getClass() == a3.getClass());

  2.                 System.out.println(a1.getClass() == a4.getClass());
复制代码
错了。 类型操作错误。a1.getClass()是至int[] 类型,而 a3.getClass()是int[][] 。类似于你一个int == String
作者: 匿名    时间: 2011-9-14 16:53
标题: 回复 楼主 的帖子
Class<? extends Object> getClass()
          返回一个对象的运行时类。
这是Object的getClass()方法的API 可以看到它返回的Class对象是自带泛型的。意思是这样的:
比如你的a1/a2 同是一维数组,那么泛型匹配可以(==)比较。而a3/a4是二维数组,和字符串数组,既不等同a1也不是a1的子类对象,反射出来的Class自然也无法比较,由于泛型是作用于编译阶段。检测类型匹配所以这两行无法通过编译。
作者: 董成海    时间: 2011-9-14 17:12
回复楼上  为什么 老师那里不报错呢
作者: 匿名    时间: 2011-9-14 17:17
标题: 回复 藤椅 的帖子
是啊 我就是想问 老师那为什么不报错 ~~~~~~:hug:
作者: 匿名    时间: 2011-9-14 17:38
我也奇怪,我的也报错,老师那里没报错。
作者: 匿名    时间: 2011-9-14 17:39
eclipse 抽风了
作者: 匿名    时间: 2011-9-14 19:19
可能是老师的jdk版本的问题,因为泛型是java1.5的新特性,也就是说1.5之前是没有泛型的。老师如果用的是1.4版本。Class类从1.0版本就有了,也就是说1.0-1.4版本那样写就不会出现编译错误!我这么理解,是不是这样的情况有待考证呵呵!
作者: 匿名    时间: 2011-9-14 21:57
标题: 回复 楼主 的帖子
我的jdk1.6,我的eclipse不报错

true
false
false
false
false




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