《疯狂JAVA讲义》——instanceof运算符
来源:互联网 发布:dede上传网站源码 编辑:程序博客网 时间:2024/05/01 18:52
instanceof运算符的前一个操作数是一个引用类型变量,后一个操作数是一个类(接口),用于判断前面的对象是否是后面的类,或子类、实现类的实例。若是,返回true;反之,返回false。
instanceof运算符前面的操作数编译时的类型要么与后面的类型相同,要么与后面的类型有父子继承关系,否则会引起编译错误。
public class InstanceofTest{ public static void main(String[] args) { //声明o的时候使用的Object类,则o编译时的类型是Object //Object类是所有类的父类,但o的实际类型是String Object o = "hello"; //String类是Object的子类,可以进行instanceof运算,返回true System.out.println("字符串是否是Object类的实例" + (o instanceof Object)); //返回true System.out.println("字符串是否是String的类实例" + (o instanceof String)); //Math类是Object的子类,可以进行instanceof运算,返回false System.out.println("字符串是否是Math类的实例" + (o intstanceof Math)); //String类实现了Comparable接口,可以进行instanceof运算,返回true System.out.println("字符串是否是Comparable接口的实例" + (o instanceof Comparable)); String s = "hello"; //String类既不是Math类,也不是Math类的父类,编译无法通过 System.out.println("字符串是否是Math类的实例" + (s instanceof Math)); }}
基本类型之间的强制类型转换只能在数值类型之间进行,数值类型和布尔类型之间不能进行转换。
引用类型之间的强制转换只能在具有继承关系的两个类型之间进行。两个没有继承关系的类型进行强制转换会发生编译错误。如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例(即编译时类型为父类类型,运行时类型为子类类型),否则将会在运行时引发ClassCastException异常。
所以可以通过使用instanceof运算符判定两个类型是否具有继承关系,从而避免出现异常。
//os编译时为Object类,实际上是String类,向上转型,自动完成Object os = "hello";if(os instanceof String)//ture{ String s = (String)os;//语句执行,向下转型,强制完成}//oi编译时为Object类,实际上是Integer类Object oi = new Integer(5);if(oi instanceof String)//false{ String s = (String)oi;//语句不执行}String s = "hello";if(s instanceof Integer)//编译错误,操作数无继承关系{ Integer i = (Integer)s;}
0 0
- 《疯狂JAVA讲义》——instanceof运算符
- 算术运算符—[疯狂java讲义]
- 赋值运算符—[疯狂java讲义]
- 比较运算符—[疯狂java讲义]
- 疯狂java讲义学习——数据类型与运算符
- 关于java里的instanceof运算符(总结于疯狂JAVA讲义)
- 疯狂Java讲义——第3章 数据类型和运算符
- 《疯狂Java讲义》第3章——数据类型和运算符
- 《疯狂Java讲义(第3版)》.(李刚)——运算符
- 疯狂JAVA讲义学习笔记3——数据类型和运算符
- 疯狂JAVA讲义---第三章(下):运算符
- 疯狂java讲义 第三章 数据类型和运算符
- [疯狂Java讲义精粹] 第二章|数据类型和运算符
- 疯狂java讲义笔记——数据类型
- 《疯狂JAVA讲义》——二维数组
- 《疯狂JAVA讲义》——多态
- 《疯狂JAVA讲义》——Singleton类
- 《疯狂Java讲义》——控制线程
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- QT5 下udp 编程实例
- iOS开发——单例
- LibGDX_2.1: LibGDX 应用框架(6 大系统交互接口)
- ====手势的使用
- 《疯狂JAVA讲义》——instanceof运算符
- [读书笔记] The.Way.To.Go
- c#调用JAVA提供的WebService处理日期格式
- 以POJ1061青蛙的约会为例谈扩展欧几里得算法
- iOS工程适配64-bit经验分享
- C-045.结构体指针
- 仿微信二维码的制作
- linux utils
- Android: 属性服务