黑马程序员技术交流社区

标题: 关于反射的问题 [打印本页]

作者: zhouchao    时间: 2013-7-24 08:57
标题: 关于反射的问题
本帖最后由 zhouchao 于 2013-7-24 09:48 编辑

class ReflectTest
{
    public static void main(String[] args)
    {
                     
        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() == a3.getClass());
        System.out.println(a1.getClass() == a4.getClass());
        这两句编译通不过

提示错误               
problem.java:12: 错误: 不可比较的类型: Class<CAP#1>和Class<CAP#2>
        System.out.println(a1.getClass() == a4.getClass());
                                         ^
  其中, CAP#1,CAP#2是新类型变量:
    CAP#1从? extends int[]的捕获扩展int[]
    CAP#2从? extends String[]的捕获扩展String[]
problem.java:13: 错误: 不可比较的类型: Class<CAP#1>和Class<CAP#2>
        System.out.println(a1.getClass() == a3.getClass());
                                         ^
  其中, CAP#1,CAP#2是新类型变量:
    CAP#1从? extends int[]的捕获扩展int[]
    CAP#2从? extends int[][]的捕获扩展int[][]
2 个错误

求解释!!


作者: 月亮人生    时间: 2013-7-24 09:36
对于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这两个类型是不一样的。根本没有比较的需要。
对于总是不成立的比较,其实是没有意义的。这个编译错误是 JDK 1.6的新功能
(张老师使用的恰好是JDK1.5的版本)
作者: 梦想蓝色天空    时间: 2013-7-24 09:40
第一个错误  int []  他是一个object对象  而int[][] 他是一个object数组  所以对象的数组是不可以比较的
第二个错误 int   他是一个object类型的  而String  不是object类型的 所以编译错误   

看完视频第一遍给我感觉是这样的,如果有错误,请指出
作者: zhouchao    时间: 2013-7-24 09:46
月亮人生 发表于 2013-7-24 09:36
对于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这两个类型是不一样的。根本 ...

这样啊  非常感谢!
作者: zhouchao    时间: 2013-7-24 09:47
梦想蓝色天空 发表于 2013-7-24 09:40
第一个错误  int []  他是一个object对象  而int[][] 他是一个object数组  所以对象的数组是不可以比较的
...

非常感谢!
作者: liuzhming    时间: 2013-7-24 09:48
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象,反之不具有相同的Class实例对象。a1.getClass()和a3.getClass()获得各自的Class对象,但他们不具有相同的维数,所以得到的Class对象是不同的类,因此无法比较。a1与a4两个数组的元素类型不同,得到的Class对象也是不同的类,也无法比较。





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