黑马程序员技术交流社区

标题: 高新技术24,有一点儿看不懂,求教 [打印本页]

作者: 贾旭    时间: 2012-5-24 13:58
标题: 高新技术24,有一点儿看不懂,求教
本帖最后由 贾旭 于 2012-5-24 13:59 编辑
  1. public static void demo() {
  2.                 // TODO Auto-generated method stub
  3.             int[] a1 = new int[3];
  4.                
  5.                 int[] a2 = new int[4];
  6.                
  7.                 int[][] a3 = new int[2][3];
  8.                
  9.                 String [] a4 = new String[4];
  10.                
  11.                 System.out.println();
  12.                 System.out.println(a1.getClass() == a2.getClass());
  13.                 System.out.println(a1.getClass() == a4.getClass());//这里总是报错
  14.                 System.out.println(a4.getClass().getSuperclass().getName());
  15.         }
复制代码
为什么报:Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends String[]>错呢。求指教

作者: 张文建    时间: 2012-5-24 14:52
//每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象
        System.out.println(a1.getClass() == a2.getClass());//true
        System.out.println(a1.getClass() == a4.getClass());false元素类型不同,a1和a4类型不一样
     System.out.println(a1.getClass() == a3.getClass());false数组维数不同
作者: 闾丘日月    时间: 2012-5-24 15:02
于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有比较的需要。
   对于总是不成立的比较,其实是没有意义的。这个编译错误是 JDK 1.6的新功能
   而张老师使用的恰好是JDK1.5的版本,楼主使用的是1.6版本。
这个问题我也不知道,我是百度的,引用了这位哥们博文的解释,lz需要了解的更清楚可以参见
http://blog.csdn.net/wizardmly/article/details/6084625
作者: 贾旭    时间: 2012-5-24 15:14
闾丘日月 发表于 2012-5-24 15:02
于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有 ...

对啊。我也很郁闷,代码一模一样。就是不对。我都无语了。原来是JDK版本的问题,明白原理就好了,我也没有必要这上面纠结。:lol




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