instanceof 详解
instanceof
是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean
的数据类型
下面针对几种可能遇到的情况来看看会有什么结果:
1. 基本类型
可以看到, 这种情况下会有编译错误,那如果右边改为引用类型呢?
此时可以看到,仍然有编译错误,那么再试试特殊的 null
呢?
好像也不行,由此可以得出,基本类型不能用于 instanceof
判断.
2. null
对于 null
,我们可以看到它只能用来判断是否是引用类型,并且返回的总是 false
,表明它不是任意一个引用类型的对象实例.
它用来判断是否是基本类型或 null
的对象时,也会有编译错误,不可用.
3. 引用类型
我们创建如下关系的类和接口:
对于如下代码:
public class TestInstanceof {public static void main(String[] args) {Dog dog = new Dog();Animal animal = new Animal();Animal cat = new Cat();System.out.println(dog instanceof Dog); // trueSystem.out.println(dog instanceof Bark); // trueSystem.out.println(animal instanceof Bark); // trueSystem.out.println(animal instanceof Dog); // falseSystem.out.println(cat instanceof Animal); // trueSystem.out.println(cat instanceof Cat); // trueSystem.out.println(dog instanceof Cat); // 编译错误System.out.println(dog instanceof Integer); // 编译错误System.out.println(dog instanceof int); // 编译错误System.out.println(dog instanceof null); // 编译错误}
}
- 基本类型完全不能用于
instanceof
判断 null
只能放在instanceof
关键字的左边
4. 数组类型
对引用类型示例稍加修改,可以得到数组类型用来判断时的情况:
public class TestInstanceof {public static void main(String[] args) {Dog[] dog = new Dog[3];Animal animal = new Animal();System.out.println(dog instanceof Dog[]); // trueSystem.out.println(dog instanceof Bark[]); // true}
}
特别地,基本类型的数组也是可以用来判断的:
public class TestInstanceof {public static void main(String[] args) {int[] ary = new int[3];System.out.println(ary instanceof int[]); // true}
}
4. 应用场景
instanceof
关键字一般用于强制转换,在强转之前用它来判断是否可以强制转换:
public B convert(A a) {if (a instanceof B) {return (B) a;}return null;
}
5. 实现原理
用类似 Java 的伪代码来描述该原理如下所示:
boolean rs;
if (obj == null) {rs= false;
} else {try {T temp = (T) obj; rs= true;} catch (ClassCastException e) {rs = false;}
}
return rs;
obj==null
,返回false
- 如果
obj
强制转换为T
时发生编译错误,返回false
- 运行时,如果
T != null
,并且(T) obj
不引发ClassCastException
,返回true
- 如果
obj != null
并且(T) obj
不引发ClassCastException
,返回true
,否则值为false
总结:
obj==null
,返回false
(T) obj
不引发ClassCastException
,返回true
,否则返回false
instanceof 详解相关推荐
- java中instanceof 详解_java中的instanceof用法详解
instanceof是Java的一个二元操作符(运算符),也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实例,返回的是boolean类型的数据.用它来判断某个对象是否是某个Clas ...
- java中instanceof 详解,神奇的instanceof
本文地址:http://www.dutycode.com/instanceof_shiyong_jiqiao.html 除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明 ...
- JS之instanceof详解
instanceof 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上. 语法:object instanceof constructor object:某个实例对象 co ...
- Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类
Day16-01 P71 面向对象12:什么是多态 //父类Person package com.oop.demo06;public class Person {public void run(){S ...
- Java基础(七): instanceof用法详解
1.instanceof说明 instanceof 是 Java 的保留关键字. 作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型. instanceof是Java中的 ...
- java 泛型 .net_Java基础11:Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...
- php开发面试题---php面向对象详解(对象的主要三个特性)
php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...
- 泛型java 代码讲解_Java泛型详解
2516326-5475e88a458a09e4.png 一,打破砂锅问到底 泛型存在的意义? 泛型类,泛型接口,泛型方法如何定义? 如何限定类型变量? 泛型中使用的约束和局限性有哪些? 泛型类型的继 ...
- Spring AOP 增强框架 Nepxion Matrix 详解
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 概述 在<深入聊一聊 Spring AOP 实现机制>一文中,介绍了 Spring A ...
最新文章
- Unity游戏开发大师班
- 基于SSM实现个人健康管理系统
- ios开发(6)uiimageView
- TCP/IP 5.3.5 认证
- git commit时避免填写Commit Message
- java 科学计数_Java和甜蜜的科学
- java statement 参数_java statement详细用法
- java找不到数据库的表_GreenDao:no such table 找不到表的终极解决方案!
- oracle ogg 12c mysql_Oracle GoldenGate 下载
- Java订单交易_Java实现获取105发卡平台的订单信息
- python url拼接_简单一文教你如何用python爬虫爬取扇贝单词
- 《神经网络与深度学习》邱锡鹏编程练习_第一章numpy_tutorial答案分享
- C编程实例-“约瑟夫问题” 解法
- 音频-什么是PCM编码格式?
- 计算机主机的组成的两部分,计算机的主机由哪两个部分组成
- java 这么获取农历_用JAVA查询中国农历年
- 重庆5G最新规划:明年建成3万个5G基站,力争主城区5G全覆盖
- discuz gbk php在utf8,Discuz!X2 utf8升级为Discuz!X2.5 GBK 完美解决方案
- 腾讯云服务器部署(保姆级)
- PyQt5_Demo5