栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

instanceof 编译通过条件的误区

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

instanceof 编译通过条件的误区

在JAVA中,instanceof关键字用来判断在其左边的对象是否为在其右边的类型的实例

在网络上查到有这样一条要求:左边的对象需要和右边的类型在同一颗继承树上,否则编译无法通过

Object类是所有类的父类,我觉得大家追根究底都在一棵树上,那岂不是任何时候都会得到true?

后来做了一些实验

需要再关注的是【声明类型】这个前提

        System.out.println(son_0 instanceof Son_1);//compile error
        System.out.println((Father)son_0 instanceof Son_1);//compile succeed, return false
        System.out.println((Object)son_0 instanceof Son_1);//compile succeed, return false
        System.out.println((FFather)son_0 instanceof Son_1);//compile succeed, return false
    

class Father extends FFather{}
class Son_0 extends Father{}
class Son_1 extends Father{}
class FFather{}

1、想要编译通过,需要声明类型符合条件,而无关运行类型

2、return结果按照运行类型得出

3、左侧不一定需要是右侧的实例或子类实例,才能通过编译,是右侧的父类也可以

由上推论:

编译通过的条件似乎是:左右的声明类型都处于一条继承链上(不可分枝)

以后有机会了要看看instanceof的底层实现,不过那大约在很遥远的将来吧

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970047.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号