public class Demo01 {
public static void main(String[] args) {
int[] array01=new int[10];
Class clazz=array01.getClass();
String[] array02=new String[30];
Class clazz2=array02.getClass();
System.out.println(array01.getClass()==array02.getClass());
System.out.println(clazz==clazz2);
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends String[]>
at test.Demo01.main(Demo01.java:13)
Demo01.java:13指的是这句---->System.out.println(array01.getClass()==array02.getClass());
clazz引用的对象是array01.getClass()
clazz2引用的对象是array02.getClass()
为什么clazz==clazz2是对的,array01.getClass()==array02.getClass()就是错的?
按照我目前的理解,clazz和clazz2操作的就是他们引用的对象,是不是我一直都理解错了?
可以这样理解array0.getClass()返回的对象类型和array1.getClass()返回的类型不同,类型不同了,所以就不能比较咯
而第二次你是强制把这两个比较对象转换成Class类型了
上面就没问题啦
那么arry0.getClass()和arry1.getClass()返回的到底是什么类型呢?
对于这种情况,可以正确编译
可以认为array0.getClass()得到的类型是Class的子类,可以认为比较的时候java能智能的帮我们把子类转成父类类型;但是array0.getClass()与array1.getClass()之间没有继承关系,所以没办法比较~