首页 > 其他 > 详细

instanceof 运算符简介

时间:2019-08-02 16:15:59      阅读:82      评论:0      收藏:0      [点我收藏+]
  • instanceof和+、-符号一样,都是Java提供的运算符;(同样特殊的还有(type)运算符)
  • instanceof运算符的前一个操作数是一个实例对象,后一个操作数是一个类,它用于判断前面的对象是否是后面的类,或者其子类的实例,如果是,返回true,否则返回false;
  • (重点)在进行引用变量的强制类型转换之前,用来判断前一个对象是否是后一个类的实例,是否可以成功转换,从而保证代码更加健壮;
  • (难点)引用变量之间的类型转换只能在具有继承关系的两个类型之间进行,如果前后是两个没有任何继承关系的类型,则进行类型转换时会报错,用instanceof判断时也会报错。
    ??????如果试图把一个父类实例强制转换成子类类型,则这个对象必须实际上是子类实例才行(即编译类型为父类类型,而运行时类型是子类类型),否则将在运行时引发ClassCastException异常,而如果用instanceof事先判断的话,则会返回false,保证代码的健壮性

??下面是个例子:

public class InstanofTest {

    public static void main(String[] args) {
        //声明obj时使用Object类,则其编译类型是Object
        //但obj运行时类型是String
        Object obj = "hello";
        //下面语句会返回true
        System.out.println(obj instanceof Object);
        //下面语句会返回true,String是Object类的子类,obj运行时类型是String,返回true
        System.out.println(obj instanceof String);
        //下面语句会返回false,Math是Object类的子类,但obj运行时类型是String
        System.out.println(obj instanceof Math);
        //下面语句在编译时不会报错,obj的编译类型是Object,是所有类包括Math类的父类
        //但运行时会报ClassCastException异常,原因是obj运行时类型是String,无法转换成Math
        Math m = (Math)obj;
        String str = "hello";
        //下面语句在编译时会报错,在Eclipse中编写该语句也会报错,str类型既不是Math类,也不是Math类的父类
        System.out.println(str instanceof Math);
    }

}

instanceof 运算符简介

原文:https://www.cnblogs.com/xiejiafan/p/11289016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!