黑马程序员技术交流社区

标题: 关于反射——Incompatible operand types Class错误 [打印本页]

作者: spiderman    时间: 2013-10-30 11:50
标题: 关于反射——Incompatible operand types Class错误
代码如下:
  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类型吗?怎么会发生类型不匹配?!!

求大神解读啊。。。。。



作者: 零下五度的水    时间: 2013-10-30 14:08
equals方法才是比较散列值吧
作者: spiderman    时间: 2013-10-30 19:36
零下五度的水 发表于 2013-10-30 14:08
equals方法才是比较散列值吧

两个问题:
1.什么是散列值?
2.如果不能用==,那为什么第一个能通过,而后面连个不能通过?
作者: 零下五度的水    时间: 2013-10-30 21:04
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);


作者: spiderman    时间: 2013-10-31 15:53
零下五度的水 发表于 2013-10-30 21:04
hashcode不就是散列码么。。。
第一个和第二个类型是 Class

泛型这里我没学明白,等我再复习一遍泛型回来感谢你哈




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