java反射机制,对象引用的问题?

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操作的就是他们引用的对象,是不是我一直都理解错了?

阅读 3k
2 个回答

可以这样理解array0.getClass()返回的对象类型和array1.getClass()返回的类型不同,类型不同了,所以就不能比较咯

而第二次你是强制把这两个比较对象转换成Class类型了

System.out.println((Class)arry0.getClass() == (Class)arry1.getClass());

上面就没问题啦

那么arry0.getClass()和arry1.getClass()返回的到底是什么类型呢?

System.out.println(arry0.getClass()); //class [I
System.out.println(arry1.getClass()); //class [Ljava.lang.String

对于这种情况,可以正确编译

System.out.println(clazz == arry0.getClass());

可以认为array0.getClass()得到的类型是Class的子类,可以认为比较的时候java能智能的帮我们把子类转成父类类型;但是array0.getClass()与array1.getClass()之间没有继承关系,所以没办法比较~

clazz,clazz2的类型相同,array01.getClass()的类型是不是跟array02.getClass()的类型相同就不知道了。

clazz,clazz2应该是取得基类的意思吧,基类类型相同可以判断。Class clazz=array01.getClass();实际上做了类型转换。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题