java反射机制,对象引用的问题?
伊谢尔伦
伊谢尔伦 2017-04-17 16:11:05
[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 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操作的就是他们引用的对象,是不是我一直都理解错了?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
ringa_lee

可以这样理解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();实际上做了类型转换。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号