java instanceof和isInstance的关系 精析
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的关系 精析的更多相关文章
- java 类名.class、object.getClass()和Class.forName()的区别 精析
1.介绍 getClass()介绍 java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类: Object类中有getClass()方法,通过这个方法就可以获得一个实 ...
- Java中instanceof和isInstance的具体区别
Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...
- Java中instanceof和isInstance区别详解
一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...
- Java instanceof 关键字是如何实现的?
作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- Java Instanceof
Java Instanceof Instanceof是一个非常简单的运算符,前一个操作通常是一个引用类型的变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的 ...
- vue.js源码精析
MVVM大比拼之vue.js源码精析 VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多 ...
- instanceof 和isInstance
Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边 ...
- instanceof和isInstance的区别
instanceof 是一个操作符(类似new, ==等) ( Object reference variable ) instanceof (class/interface type) if(a i ...
- MVVM大比拼之AngularJS源码精析
MVVM大比拼之AngularJS源码精析 简介 AngularJS的学习资源已经非常非常多了,AngularJS基础请直接看官网文档.这里推荐几个深度学习的资料: AngularJS学习笔记 作者: ...
随机推荐
- node.js第11课(HTTPclient)
一.http模块提供了两个函数http.request和http.get,功能是作为client向HTTPserver发起请求. Ext.Ajax.request({},function ...
- [Node.js]Domain模块
Domain(域)模块简化了异步代码的异常处理方式,可以捕捉处理try catch无法捕捉的异常. 引入 var domain=require("domain"); domain模 ...
- .Net高级技术——垃圾收集器
垃圾收集器概述 大排档和学校食堂.一个是别人帮你收拾盘子,一个是自己收拾盘子. 垃圾收集GC(Garbage Collection).内存的分配.回收不需要程序员操心,程序员只要需要的时候new就可以 ...
- asp.net MVC 3/4 equivalent to a response.filter
am in a need to intercept all of the html that will be sent to the browser and replace some tags tha ...
- fundamentals5
PROTOBUF的DELPHI开源框架fundamentals5 GITHUB: https://github.com/fundamentalslib/fundamentals5 # Fundamen ...
- symbol(s) not found for architecture armv7
Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ...
- 开启otl的64位长整数支持
要开启OTL的64位长整数支持,必须先定义宏 #define OTL_BIGINT __int64 // VC++, Borland C++ 或者 #define OTL_BIGINT long lo ...
- 求两个数中的较大值max(a,b)。(不用if,>)
题目:求两个数的较大值,不能使用if.>. 1.不使用if.>,还要比较大小,貌似就只能使用条件表达式: x=<表达式1>?<表达式2>:<表达式3>; ...
- require.js 最佳实践
require.js是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(require.js), Javascript模块化工具require.js教程,RequireJ ...
- relatedTarget、fromElement、toElement相关元素
在发生mouseover和mouseout事件时,还会涉及更多的元素.这两个事件都会涉及把鼠标指针从一个元素的边界之内移到另一个元素边界之内.对mouseover事件而言,事件的主目标是获得光标的元素 ...