返回

Java千问11:instanceof运算符用法详解

发布时间:2023-05-14 09:00:28 127
# 数据

​Java语言当中提供了一个叫做instanceof的运算符。很多教科书上对这个运算符的介绍并不详细,只是简单的说这个运算符是用来判断某个对象是不是属于某种类型。我们现在就用一篇短文介绍一下instanceof的运算符的作用和注意事项。请看下面的代码片段

代码中定义了一个接口和两个类。大家记清楚它们之间的关系:Person类实现了Moveable接口,Student类继承了Person类。紧接着我们来看下面的代码​

在代码中,我们创建了一些对象,并且使用instanceof运算符判断某个对象是否属于某种类型。请问程序的输出结果会是什么呢?公布一下答案:全部输出true!有读者可能不解为什么会是这样的输出结果?比如标号为⑥的那行代码,明明p2是Person类的对象,而Person类是Student的父类,为什么虚拟机会认为p2是Student类的对象呢?​

为了弄清楚这个问题,我们必须搞清楚instanceof运算符的判断依据。instanceof运算符在判断的过程中,看的是引用实际指向的对象 (而不是看引用自身的类型)是不是可以被认定为属于某种类型。如果可以被认定为属于这种类型,那么运算结果为true;反之,如果假设不成立或未必成立,则运算结果为false。比如说,p2虽然是Person类型的,但它实际指向了一个Student类型的对象,所以p2肯定属于Student类型,因此输出结果为true。​

其实我们可以用一种比较简单的方法来理解输出结果,那就是用一个自问句式来判断:一个a是一个A吗?比如说,p2实际指向的是一个Student类型的对象,而代码中出现了” p2 instanceof Person”(见标号为④的代码),我们就可以自问一下:一个Student(学生,既p2指向的那个对象)是一个Person(人)吗?一个学生当然是一个人,所以这句自问的答案肯定是true。反过来,如果代码被写成” p1 instanceof Student”, p1实际指向的是一个Person类的对象,我们再来分析一下运算结果,也可以采用这种自问的形式:一个Person(人)是一个Student(学生)吗?一个人未必是一个学生,所以这种假设并不一定成立,因此判断的结果为false。​

我想,讲到这里,读者已经知道instanceof运算符的判断依据了吧?那么,在使用这个运算符的过程中,要注意哪些事项呢?归纳一下可以总结出两点:​

1、instanceof左边必须是引用数据类型,而它右边一定是类或者接口的名称,不能是基础数据类型的名称。比如”1 instanceof int”或者” 1 instanceof Integer”这样的写法都是错误的。​

2、如果instanceof左边的引用指向的是一个空对象(null),那么无论instanceof右边无论是什么类型,运算结果肯定是false。​

如果想系统学习Java编程可以​​点击这里​​观看我在本站的视频课程。

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线