黑马程序员技术交流社区

标题: 张孝祥——Java基础加强第24讲中的一个小程序 [打印本页]

作者: 黑马_许芸    时间: 2012-8-28 17:06
标题: 张孝祥——Java基础加强第24讲中的一个小程序
  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. }
复制代码

作者: 朱烈葵    时间: 2012-8-28 18:05
其实这个问题 我也想过,不知道为什么,只知道是类型不配 一个是int [] 一个是int[][]类型所以不能相等,使用equlas可以 搞不懂
谁能帮忙解释下
作者: 申俊伟    时间: 2012-8-28 18:56
<font color="red">这个删了。
作者: 唐见    时间: 2012-8-28 19:21
我这也一样报错,改成equals吧
作者: 高正新    时间: 2012-8-28 21:53
一个一维数组,一个是二维数组。
当年JAVA版本低,对这方面要求不严。
现在JAVA版本高了,提高了安全性。所以不能直接比较了。。
你把JAVA版本降低一下就不会报错了。。
作者: 张金    时间: 2012-8-28 22:54
受教了,哎呀,菜鸟一枚,路过,路过。
作者: 曹恒业    时间: 2012-8-28 23:12
其实楼主的问题是由于编译器版本进步的原因。
对于数组类型的变量,编译器在编译时,已经知道类型了。也就是说,编译器知道2个类型不一样。所以编译器认为没有比较的必要,就直接报错了。
这个编译错误是 JDK 1.5的新功能,jdk1.5和1.6都会报错,1.4及以下不会报错。
我特意截图给楼主:






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