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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
  1. public class ReflectArray {


  2. public static void main(String[] args) {
  3. int[] a1=new int[3];
  4. int[] a2=new int[4];
  5. int[][] a3=new int[2][3];
  6. String[] a4=new String[3];
  7. System.out.println(a1.getClass()==a2.getClass());
  8. System.out.println(a1.getClass()==a4.getClass());//会报错
  9. System.out.println(a1.getClass()==a3.getClass());//会报错
复制代码
问题:
为什么上文代码中最后两行会报错(Incompatible operand types Class)?当用“==”比较的时候,不是调用hashcode()方法吗,返回的不是int类型吗?怎么会发生类型不匹配?!!

求大神解读啊。。。。。


评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
equals方法才是比较散列值吧
回复 使用道具 举报
零下五度的水 发表于 2013-10-30 14:08
equals方法才是比较散列值吧

两个问题:
1.什么是散列值?
2.如果不能用==,那为什么第一个能通过,而后面连个不能通过?
回复 使用道具 举报
hashcode不就是散列码么。。。
第一个和第二个类型是 Class<? extends int[]>
第三个是Class<? extends int[][]>
第四个是Class<? extends String[]>
你用jdk1.5之前的版本编译的话就不报错,1.5之后的版本因为引入了泛型,所以编译器认为一和二是同一类型,三和四分别是两个类型
不同类型的引用变量是不能用 == 比较的
你要是非要比的话,可以这样
Class cls1 = a1.getClass();
Class cls3 = a3.getClass();
syso(cls1==cls3);

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
零下五度的水 发表于 2013-10-30 21:04
hashcode不就是散列码么。。。
第一个和第二个类型是 Class

泛型这里我没学明白,等我再复习一遍泛型回来感谢你哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马