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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 燕国庆 高级黑马   /  2012-12-4 17:35  /  1148 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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()))

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 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: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()是一个方法,用于判断引用变量引用地址指向的存储内容是否相等

这样看来,==不存在自动调用其父类中方法的可能

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
int[] a=new int[3];
int[] b=new int[4]
int[][] c=new int[4][2]

引用变量a 指向的对象是由int.class字节码生成的实例对象,在内存中只存在这么一份字节码。
引用变量c 指向的对象是由int[].class字节码生成的实例对象,在内存中也是只存在这么一份字节码。
两份不同的字节码,所占用的内存地址当然不同不会相等,自然编译器报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马