java instanceof和isInstance的关系 精析
2024-09-19 19:52:34
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"));
}
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
最新文章
- 《高性能javascript》一书要点和延伸(下)
- SVN部署和使用
- POJ - 1666 Candy Sharing Game
- 【OpenStack】OpenStack系列3之Swift详解
- OpenStack Nova 制作 Windows 镜像
- C#写的SQL聚合函数
- OpenIOC
- js读取本地磁盘文本文件并保存为JSON数据(有格式的文本)
- photoshop中rgb与索引模式的区别
- WebApi Gzip(Deflate) 压缩请求数据
- HBase文件格式演变之路
- 10天学会phpWeChat——第九天:数据库增、删、改、查(CRUD)操作
- 对Java的初识
- python3之递归
- i++ 是线程安全的吗?
- IntelliJ IDEA - 热部署插件JRebel ,对静态资源文件进行热部署?javascript、css、vm文件
- java链接mysql 中文乱码
- 【转载】C#堆和栈的区别
- Google 推出新搜索引擎以查找数据集
- pyqt5最简单的打开和保存文件