1.instanceof

  用途:判断这个object对象是不是这种Class类型。

  语法:

boolean result = object instanceof Class;

  用法:

  判断object对象是否是class类(本身类);

  判断object对象是否是本身类所继承的类(父类);

  判断object对象是否是本身类所实现的接口;

  所有的对象都是Object类;

  凡是null相关的都是false。

  示例:

  共用代码

/**
* 机器
* @explain
* @author Marydon
* @creationTime 2018年10月17日上午9:32:01
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
class Machine { } /**
* 电脑
* @explain
* @author Marydon
* @creationTime 2018年10月17日上午9:32:14
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
class Computer extends Machine { } /**
* usb接口
* @explain
* @author Marydon
* @creationTime 2018年10月17日上午9:32:27
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
interface Usb { } /**
* 鼠标
* @explain
* @author Marydon
* @creationTime 2018年10月17日上午9:32:39
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
class Mouse implements Usb{ } /**
* 测试instanceof与isInstance()
* @explain
* @author Marydon
* @creationTime 2018年10月17日上午9:25:15
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
public class TestInstance {
// main方法
}

  测试

public static void main(String[] args) {
Computer computer = new Computer();
Mouse mouse = new Mouse(); System.out.println("==============instanceof阶段测试1==============");
// 判断object对象是否是class类(本身类)
System.out.println(computer instanceof Computer);
// 判断object对象是否是本身类所继承的类(父类)
System.out.println(computer instanceof Machine);
// System.out.println(computer instanceof Mouse);// 编译报错:Incompatible conditional operand types Computer and Mouse
// 判断object对象是否是本身类所实现的接口
System.out.println(mouse instanceof Usb);
// System.out.println(mouse instanceof Machine);// 编译报错 System.out.println("==============instanceof阶段测试2==============");
// 所有的对象都是Object类
System.out.println(computer instanceof Object);
System.out.println(mouse instanceof Object); System.out.println("==============instanceof阶段测试3==============");
// 凡是null相关的都是false
System.out.println(null instanceof Object);// false
System.out.println(null instanceof Computer);// false
}

2.isInstance

  用途:判断这个object对象能不能被转化为这个Class类。

  语法:

boolean result = Class.class.isInstance(object);

  用法:

  判断object对象能否转化成class类(本身类);

  判断object对象能否转化成本身类所继承的类(父类);

  判断object对象能否转化成本身类所实现的接口;

  所有的对象都转换成Object类;

  凡是null相关的都是false。

  示例:

public static void main(String[] args) {
Computer computer = new Computer();
Mouse mouse = new Mouse(); System.out.println("==============isInstance阶段测试1==============");
// 判断object对象能否转化成class类(本身类)
System.out.println(Computer.class.isInstance(computer));
// 判断object对象能否转化成本身类所继承的类(父类)
System.out.println(Machine.class.isInstance(computer));
// 明显不能这样比较,但编译通过
System.out.println(Mouse.class.isInstance(computer));// false // 判断object对象能否转化成本身类所实现的接口
System.out.println(Usb.class.isInstance(mouse)); // 明显不能这样比较,但编译通过
System.out.println(Machine.class.isInstance(mouse));// false System.out.println("==============isInstance阶段测试2==============");
// 所有的对象都转换成Object类
System.out.println(Object.class.isInstance(computer));
System.out.println(Object.class.isInstance(mouse)); System.out.println("==============isInstance阶段测试3==============");
// 凡是null相关的都是false
System.out.println(Object.class.isInstance(null));// false
System.out.println(Computer.class.isInstance(null));// false
}  

3.区别与联系

  区别:

  instanceof是一个操作符,isInstance是Class类的一个方法;

  instanceof表示对象A是不是B类型,isInstance表示对象A是否能强转成B类型;

  instanceof 编译器在编译时需要知道类的具体类型,isInstance 编译器在运行时才进行类型检查,故可用于反射,泛型中。

  联系:

  isInstance()是 Java 语言 instanceof 运算符的动态等效方法。

  示例:

public static void main(String[] args) {
System.out.println("==============instanceof和isInstance==============");
// 区别
// System.out.println(1 instanceof String);// 编译不通过
System.out.println(String.class.isInstance(1));// false // 联系
System.out.println("Marydon" instanceof String);
System.out.println(String.class.isInstance("Marydon"));
}

  

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

java instanceof和isInstance的关系 精析的更多相关文章

  1. java 类名.class、object.getClass()和Class.forName()的区别 精析

        1.介绍 getClass()介绍 java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类: Object类中有getClass()方法,通过这个方法就可以获得一个实 ...

  2. Java中instanceof和isInstance的具体区别

    Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...

  3. Java中instanceof和isInstance区别详解

     一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...

  4. Java instanceof 关键字是如何实现的?

    作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  5. Java Instanceof

    Java Instanceof Instanceof是一个非常简单的运算符,前一个操作通常是一个引用类型的变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的 ...

  6. vue.js源码精析

    MVVM大比拼之vue.js源码精析 VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多 ...

  7. instanceof 和isInstance

    Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边 ...

  8. instanceof和isInstance的区别

    instanceof 是一个操作符(类似new, ==等) ( Object reference variable ) instanceof (class/interface type) if(a i ...

  9. MVVM大比拼之AngularJS源码精析

    MVVM大比拼之AngularJS源码精析 简介 AngularJS的学习资源已经非常非常多了,AngularJS基础请直接看官网文档.这里推荐几个深度学习的资料: AngularJS学习笔记 作者: ...

随机推荐

  1. LoadRunner的简单使用《第一篇》

    LoadRunner是一个用压力测试的软件.这东西比较难上手,光安装就非常麻烦.好不容易一步步跟着安装说明安装好之后,还是用不了. 记录一个问题如下: 导入脚本的时候报错fail to create ...

  2. perf 工具介绍2

    [root@localhost ~]# cat test1.c void longa() { int i,j; ; i < ; i++) j=i; //am I silly or crazy? ...

  3. [c#]WebClient异步下载文件并显示进度

    摘要 在项目开发中经常会用到下载文件,这里使用winform实现了一个带进度条的例子. 一个例子 using System; using System.Collections.Generic; usi ...

  4. Ext BoxComponent

    Ext.BoxComponent也是一个比较重要的基础类,它直接继承自Ext.Component,并实现了定位和控制自身大小的功能. 可以使用pageX.pageY.x.y为Ext.BoxCompon ...

  5. EF实体框架处理实体之间关联关系与EF延迟机制(下)

    在数据库中,表与表之间可能存在多种联系,比如,一对多,多对多的关系.当我们使用逻辑外键在数据库建立两张表之间的关系的时候,我们使用EF实体框架 必然也会将这种关系映射到我们的实体关系中来.所以,在我们 ...

  6. 基于nginx实现protobuf RPC

    老婆一起来上海工作,每个月消费立马上来了,做了一个android记账应用,把每笔帐都实时记录进去.开始是单机版的,只能两个人分别记,月底再merge一下.刚好有一台阿里云的ECS,于是准备升级为带服务 ...

  7. 最值得你所关注的10个C语言开源项目

    . Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接 ...

  8. OpenCV学习(40) 人脸识别(4)

    在人脸识别模式类中,还实现了一种基于LBP直方图的人脸识别方法.LBP图的原理参照:http://www.cnblogs.com/mikewolf2002/p/3438698.html       在 ...

  9. 寻路DEMO

    网格场景的寻路算法DEMO 灰色格子为默认正常蓝色格子表示为障碍物,不可进入红色细条在格子周围,表示格子的墙,用于阻碍行走紫色为当前鼠标选中格子黄色为寻路的起始位置和结束位置.鼠标左键设置,CTRL+ ...

  10. 【转】QT CEF3 消息循环处理

    初次写博客,可能有点乱, 按照自己的实际经历谈一下CEF3钟遇到的一些坑,希望对以后的小伙有些帮助. 先说一下经历,当初第一次接触CEF3的时候,没做特殊处理,直接将cef3封装成控件,嵌入到QT程序 ...