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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package cn.itcast.day1;

  2. public class ReflectTest6
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] a1 = new int[3];
  7.                 int[] a2 = new int[4];
  8.                 int[][] a3 = new int[2][3];
  9.                 String[] a4 = new String[3];
  10.                
  11.                 System.out.println(a1.getClass() == a2.getClass());
  12.                 <font color="red">System.out.println(a1.getClass() == a3.getClass());  // 老师写的这个程序没有任何问题,可以运行出来,可是为什么同样的代码我的eclipse编译通不过呢?
  13.         System.out.println(a1.getClass() == a4.getClass());  //Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends int[][]></font>
  14.         System.out.println(a1.getClass().getName());
  15.         }
  16. }
复制代码

6 个回复

倒序浏览
其实这个问题 我也想过,不知道为什么,只知道是类型不配 一个是int [] 一个是int[][]类型所以不能相等,使用equlas可以 搞不懂
谁能帮忙解释下
回复 使用道具 举报
<font color="red">这个删了。
回复 使用道具 举报
我这也一样报错,改成equals吧
回复 使用道具 举报
一个一维数组,一个是二维数组。
当年JAVA版本低,对这方面要求不严。
现在JAVA版本高了,提高了安全性。所以不能直接比较了。。
你把JAVA版本降低一下就不会报错了。。
回复 使用道具 举报
受教了,哎呀,菜鸟一枚,路过,路过。
回复 使用道具 举报
其实楼主的问题是由于编译器版本进步的原因。
对于数组类型的变量,编译器在编译时,已经知道类型了。也就是说,编译器知道2个类型不一样。所以编译器认为没有比较的必要,就直接报错了。
这个编译错误是 JDK 1.5的新功能,jdk1.5和1.6都会报错,1.4及以下不会报错。
我特意截图给楼主:

点评

我下午就怀疑是这问题,调试到jre1.5,结果换是报错。原来张老师当时用的jre1.4???  发表于 2012-8-29 02:39
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马