加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

instanceof 运算符简介

发布时间:2020-12-15 05:30:30 所属栏目:Java 来源:网络整理
导读:instanceof和+、-符号一样,都是Java提供的运算符;(同样特殊的还有(type)运算符) instanceof运算符的前一个操作数是一个实例对象,后一个操作数是一个类,它用于判断前面的对象是否是后面的类,或者其子类的实例,如果是,返回true,否则返回false; (重
  • 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);
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读