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. 记录一次软件Bug发生的过程

    结束一周的紧张工作,难得的休息时光,坐在电脑前浏览博客.听听歌.看看大片,这也算是一种享受. 因为年度的开发任务已经开始了,所以最近会特别忙,新人的成长又没有想象中的好,经常在他们身上看到自己去年的影 ...

  2. shell中的括号(小括号,中括号,大括号)及单引号、 双引号,反引号(``)

    一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  3. linux系统负载相关的概念和度量

    系统负载有 CPU利用率 和 LoadAverage这2个概念. cpu利用率:cpu utilization,是进程(task)被内核调度进程实际分配了CPU资源后,在时间片内使用CPU进行工作运算 ...

  4. Tomcat与Gzip与缓存

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. VirtualBox 安装虚拟机

  6. Android图片加载框架最全解析(五),Glide强大的图片变换功能

    大家好,又到了学习Glide的时间了.前段时间由于项目开发紧张,再加上后来又生病了,所以停更了一个月,不过现在终于又可以恢复正常更新了.今天是这个系列的第五篇文章,在前面四篇文章的当中,我们已经学习了 ...

  7. Common Internet File System

    CIFS (Common Internet File System) is a protocol that gained popularity around the year 2000, as ven ...

  8. Navicat Premium 12全系列

    Navicat 是香港卓软数码科技有限公司生产的一系列 MySQL.MariaDB.Oracle.SQLite.PostgreSQL 及 Microsoft SQL Server 的图形化数据库管理及 ...

  9. Java---多线程断点下载

    在上一章中我们实现了多线程下载功能,这里我们添加断点下载功能,防止下载过程中程序意外退出.具体代码如下: package com.jwzhangjie; /** * 说明: * 每一个线程下载的位置计 ...

  10. Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题

    Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题 针对一个post请求,android studio中无法正常导入以下两个包: imp ...