Java基础系列--instanceof关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8492158.html
instanceof关键字是在Java类中实现equals方法最常使用的关键字,表示其左边的对象是否是右边类型的实例,这里右边的类型可以扩展到继承、实现结构中,可以是其真实类型,或者真实类型的超类型、超接口类型等。
instanceof左边必须是对象实例或者null类型,否则无法通过编译。
instanceof右边必须是左边对象的可转换类型(可强转),否则无法通过编译。
使用实例:
1 interface IFather1{} 2 interface ISon1 extends IFather1{} 3 class Father1 implements IFather1{} 4 class Son1 extends Father1 implements ISon1{} 5 public class InstanceofTest { 6 public static void main(String[] args){ 7 Father1 father1 = new Father1(); 8 Son1 son1 = new Son1(); 9 System.out.println(son1 instanceof IFather1);//1-超接口 10 System.out.println(son1 instanceof Father1);//2-超类 11 System.out.println(son1 instanceof ISon1);//3-当前类 12 System.out.println(father1 instanceof IFather1);//4-超接口 13 System.out.println(father1 instanceof ISon1);//false 14 } 15 }
执行结果为:
true true true true false
View Code
如上实例所示:除了最后一个,前四个全部为true,查看类的继承关系如下:
可以明显看到,Son1类是最终的类,其对象son1可以instanceof上面所有的接口和类(IFather1、ISon1、Father1、Son1),而Father1的实例father1上级只有IFather1接口和本类Father1能instanceof,其余均无法成功。
这样我们就能理解instanceof的用途了,最后说说其在equals中的作用,我们来看个简单的equals实现(来自java.lang.String类):
1 public boolean equals(Object anObject) { 2 if (this == anObject) { 3 return true; 4 } 5 if (anObject instanceof String) { 6 String anotherString = (String) anObject; 7 int n = value.length; 8 if (n == anotherString.value.length) { 9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if (v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }
明显在第5行使用到了instanceof关键字,其目的就是为了判断给定的参数对象是否是String类的实例。区别于getClass()方法,后者得到的是当前对象的实际类型,不带继承关系。
1 System.out.println(son1.getClass()); 2 System.out.println(father1.getClass());
结果为:
class Son1 class Father1
View Code
参考:Java关键字——instanceof
转载于:https://www.cnblogs.com/V1haoge/p/8492158.html
Java基础系列--instanceof关键字相关推荐
- 夯实Java基础系列22:一文读懂Java序列化和反序列化
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 夯实Java基础系列1:Java面向对象三大特性(基础篇)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- Java基础系列五 面向对象程序设计
Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...
- string substring的用法_夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战...
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序
目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...
- [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理
参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...
- 知其然,知其所以然之Java基础系列(一)
相信大家在最初接触Java基础学习的时候,也只是跟着课本上的描述学习,知其然,不知所以然,要想成为一个Java老鸟,不仅要学会怎么用,也要知道为何这么用.在Java基础系列的博客中,我会列举一系列大家 ...
最新文章
- C#和Javascript间互转的Xxtea加解密
- 无线网络实体图生成工具airgraph-ng
- 理顺 JavaScript (4) - 变量、常量与数据类型
- python打地鼠游戏代码_妈妈和宝宝在家,自己做了个打地鼠游戏,网友:宝宝笑得好开心...
- Java是否为整数_Java问题 输入一个数判定其是否为整数
- Java03-day03【switch、循环(for、while、do...while)、三种循环的区别、跳转控制语句、Random、循环经典例题】
- day011_步入百万年薪的第十一天
- flash时间轴控制命令
- 前端进阶必备Node.js,你得了解一下
- Mendix:低代码平台四大常见用例开发
- Apache 回应:参与开源不受 EAR 约束
- js将一篇文章中多个连续的br标签替换成两个连续的br标签
- 朴素贝叶斯分类算法(Naive Bayesian classification)
- 高级电工技术实训考核装置
- 王燕《应用时间序列分析》学习笔记1
- 体验云编程——IOS脚本学习门户
- TOEFL wordlist 35
- GIS影像数据格式说明
- 机器学习(九)决策树,随机森林
- python学习笔记之序列,内含列表和元组的常用方法
热门文章
- 模态窗口插件之Jbox
- DataSet与DataReader的区别
- a href=# 与 a href=javascript:void(0) 的区别
- CNN+Transformer=Better,国科大华为鹏城实验室提出Conformer,84.1% Top-1准确率
- 药盒识别/垃圾分类—高精度AI模型训练及边缘部署分享
- CV Code | 计算机视觉开源周报20190904期
- Python 之父再度发声:我们能为中国的“996”程序员做什么?
- 卷王李富贵算法每日一题--分治算法(三)--逃亡
- 写给小白的自然语言处理入门简介
- 最先进单插槽专业绘图解决方案