原创作品,可以转载,但是请标注出处地址: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关键字相关推荐

  1. 夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  2. 夯实Java基础系列15:Java注解简介和最佳实践

    Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...

  3. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. Java基础系列五 面向对象程序设计

    Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...

  6. string substring的用法_夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战...

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  7. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

  8. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

  9. 知其然,知其所以然之Java基础系列(一)

    相信大家在最初接触Java基础学习的时候,也只是跟着课本上的描述学习,知其然,不知所以然,要想成为一个Java老鸟,不仅要学会怎么用,也要知道为何这么用.在Java基础系列的博客中,我会列举一系列大家 ...

最新文章

  1. C#和Javascript间互转的Xxtea加解密
  2. 无线网络实体图生成工具airgraph-ng
  3. 理顺 JavaScript (4) - 变量、常量与数据类型
  4. python打地鼠游戏代码_妈妈和宝宝在家,自己做了个打地鼠游戏,网友:宝宝笑得好开心...
  5. Java是否为整数_Java问题 输入一个数判定其是否为整数
  6. Java03-day03【switch、循环(for、while、do...while)、三种循环的区别、跳转控制语句、Random、循环经典例题】
  7. day011_步入百万年薪的第十一天
  8. flash时间轴控制命令
  9. 前端进阶必备Node.js,你得了解一下
  10. Mendix:低代码平台四大常见用例开发
  11. Apache 回应:参与开源不受 EAR 约束
  12. js将一篇文章中多个连续的br标签替换成两个连续的br标签
  13. 朴素贝叶斯分类算法(Naive Bayesian classification)
  14. 高级电工技术实训考核装置
  15. 王燕《应用时间序列分析》学习笔记1
  16. 体验云编程——IOS脚本学习门户
  17. TOEFL wordlist 35
  18. GIS影像数据格式说明
  19. 机器学习(九)决策树,随机森林
  20. python学习笔记之序列,内含列表和元组的常用方法

热门文章

  1. 模态窗口插件之Jbox
  2. DataSet与DataReader的区别
  3. a href=# 与 a href=javascript:void(0) 的区别
  4. CNN+Transformer=Better,国科大华为鹏城实验室提出Conformer,84.1% Top-1准确率
  5. 药盒识别/垃圾分类—高精度AI模型训练及边缘部署分享
  6. CV Code | 计算机视觉开源周报20190904期
  7. Python 之父再度发声:我们能为中国的“996”程序员做什么?
  8. 卷王李富贵算法每日一题--分治算法(三)--逃亡
  9. 写给小白的自然语言处理入门简介
  10. 最先进单插槽专业绘图解决方案