A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾旭 中级黑马   /  2012-5-24 13:58  /  1621 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾旭 于 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[]>错呢。求指教

3 个回复

倒序浏览
//每个数组属于被映射为 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数组维数不同
回复 使用道具 举报
于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有比较的需要。
   对于总是不成立的比较,其实是没有意义的。这个编译错误是 JDK 1.6的新功能
   而张老师使用的恰好是JDK1.5的版本,楼主使用的是1.6版本。
这个问题我也不知道,我是百度的,引用了这位哥们博文的解释,lz需要了解的更清楚可以参见
http://blog.csdn.net/wizardmly/article/details/6084625
回复 使用道具 举报
闾丘日月 发表于 2012-5-24 15:02
于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有 ...

对啊。我也很郁闷,代码一模一样。就是不对。我都无语了。原来是JDK版本的问题,明白原理就好了,我也没有必要这上面纠结。:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马