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 and Class
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操作的就是他们引用的对象,是不是我一直都理解错了?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可以这样理解array0.getClass()返回的对象类型和array1.getClass()返回的类型不同,类型不同了,所以就不能比较咯
而第二次你是强制把这两个比较对象转换成Class类型了
上面就没问题啦
那么arry0.getClass()和arry1.getClass()返回的到底是什么类型呢?
对于这种情况,可以正确编译
可以认为array0.getClass()得到的类型是Class的子类,可以认为比较的时候java能智能的帮我们把子类转成父类类型;但是array0.getClass()与array1.getClass()之间没有继承关系,所以没办法比较~
clazz,clazz2的类型相同,array01.getClass()的类型是不是跟array02.getClass()的类型相同就不知道了。
clazz,clazz2应该是取得基类的意思吧,基类类型相同可以判断。Class clazz=array01.getClass();实际上做了类型转换。