黑马程序员技术交流社区
标题:
数组反射的疑惑
[打印本页]
作者:
燕国庆
时间:
2012-12-4 17:35
标题:
数组反射的疑惑
int[] a=new int[3];
int[] b=new int[4]
int[][] c=new int[4][2];
System.out.println(a.getClass()==b.getClass());
System.out.println(a.getClass()==c.getClass());//
为什么此行代码编译时不能通过那,任意两个对象通过getClass()方法不就能比较是否相同吗?而利用equals就能通过那
System.out.println(a.getClass().equals(c.getClass()))
作者:
xjandrew
时间:
2012-12-5 15:14
本帖最后由 xjandrew 于 2012-12-5 15:18 编辑
编译不通过是因为它们是不兼容的两个类型
从int型是不能转换成object的 int是基本类型 不是对象类型
同时getClass()是Object 的方法。
对于数组类型,数组有从Object继承吗?(于是我也纳闷了,可以调用getClass()方法吗?)
用此方法时,
System.out.println(a.getClass());
一维数组会返回class [I
System.out.println(c.getClass());
二维数组会返回class [[I
返回的这两个类型不是类,它们得比较同两个基本数据类型,
比如:System.out.println(1==true);一样,会出现无法比较的编译错误。
作者:
xjandrew
时间:
2012-12-5 15:31
本帖最后由 xjandrew 于 2012-12-5 15:43 编辑
咱再看看错误提示
Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends int[][]>
a.getClass()
它的泛型类是继承int[]一维数组的
c.getClass()
它的泛型类是继承int[][]二维数组的
==和equals()
==是一个关系运算符,用于判断两个简单变量的值是否相等,或两个引用变量的引用地址是否相等
equals()是一个方法,用于判断引用变量引用地址指向的存储内容是否相等
这样看来,==不存在自动调用其父类中方法的可能
作者:
怪盗急得
时间:
2012-12-5 17:21
int[] a=new int[3];
int[] b=new int[4]
int[][] c=new int[4][2]
引用变量a 指向的对象是由int.class字节码生成的实例对象,在内存中只存在这么一份字节码。
引用变量c 指向的对象是由int[].class字节码生成的实例对象,在内存中也是只存在这么一份字节码。
两份不同的字节码,所占用的内存地址当然不同不会相等,自然编译器报错。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2