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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouchao 中级黑马   /  2013-7-24 08:57  /  1424 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 个错误

求解释!!

5 个回复

正序浏览
liuzhming 来自手机 中级黑马 2013-7-24 09:48:17
地板
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象,反之不具有相同的Class实例对象。a1.getClass()和a3.getClass()获得各自的Class对象,但他们不具有相同的维数,所以得到的Class对象是不同的类,因此无法比较。a1与a4两个数组的元素类型不同,得到的Class对象也是不同的类,也无法比较。
回复 使用道具 举报
梦想蓝色天空 发表于 2013-7-24 09:40
第一个错误  int []  他是一个object对象  而int[][] 他是一个object数组  所以对象的数组是不可以比较的
...

非常感谢!
回复 使用道具 举报
月亮人生 发表于 2013-7-24 09:36
对于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这两个类型是不一样的。根本 ...

这样啊  非常感谢!
回复 使用道具 举报
第一个错误  int []  他是一个object对象  而int[][] 他是一个object数组  所以对象的数组是不可以比较的
第二个错误 int   他是一个object类型的  而String  不是object类型的 所以编译错误   

看完视频第一遍给我感觉是这样的,如果有错误,请指出
回复 使用道具 举报
对于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这两个类型是不一样的。根本没有比较的需要。
对于总是不成立的比较,其实是没有意义的。这个编译错误是 JDK 1.6的新功能
(张老师使用的恰好是JDK1.5的版本)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马