黑马程序员技术交流社区

标题: 数组反射的问题 [打印本页]

作者: 林发明    时间: 2014-3-30 11:33
标题: 数组反射的问题
  1. //数组与Object的关系
  2.                 int [] a1 = new int[]{1,2,3};
  3.                 int [] a4 = new int[5];
  4.                 int [][] a2 = new int[2][3];
  5.                 String [] a3 = new String[]{"adf"};
  6.                 System.out.println(a1.getClass() == a4.getClass());
  7.                 System.out.println(a1.getClass() == a2.getClass());//为什么这一行提示错误呢?我仅仅是判断字节码是否相同啊
复制代码


QQ截图20140330113238.png (95.78 KB, 下载次数: 8)

QQ截图20140330113238.png

作者: 630681386@qq.co    时间: 2014-3-30 13:02
其实这个问题就相当于String.class==Integer.class一样,在数组中一维数组和多维数组不是一种类型的,不能放到一起去比较

作者: 清风木扬    时间: 2014-3-30 13:07
java1.5以前是可以的,java1.5以引用泛型 现在的Class是一个泛型类。

  a1.getClass() 的返回结果类型是 Class<? extends int[]>   
  a2.getClass() 的返回结果类型是 Class<? extends int[][]>   
  类型不同不可以用==
//解决方法。
  System.out.println(a1.getClass().getName() == a2.getClass().getName());
  System.out.println((Class)a1.getClass() == (Class)a2.getClass());


作者: kevinmesss.tz    时间: 2014-3-30 13:12
类型和维度相同的数组他们的字节码文件相同。
==表示两个运算数是否相等
1.5之后如果比较的两个数不是同一类型则会报错
a1的类型是int[].class
a2是int[][].class,类型不匹配




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