instanceof 关键字

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

用法 1

boolean result = object instanceof class

参数:

  • result:布尔类型。
  • object:任意对象表达式。
  • class:任意已定义的对象类。

说明:

  • 如果 object 是 class 的一个实例,则返回 true

  • 如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false

用法 2

A instanceof B ? A : C;

将instanceof当做一个三目运算符,判断是否A可以转换B

instanceof用法

规则:

  1. 左边的对象实例不能是基础数据类型
  2. 左边的对象实例和右边的类不在同一个继承树上
  3. null用instanceof跟任何类型比较时都是false

1.左边的对象实例不能是基础数据类型

因为 : java中8种基本数据类型不是对象,如果要比较得用包装类

在这里插入图片描述
在这里插入图片描述
2. 左边的对象实例和右边的类不在同一个继承树上
在这里插入图片描述
3. null用instanceof跟任何类型比较时都是false
在这里插入图片描述

案例 :2

Object > Person > teacher

Object > Person > Student

Object >String

class Person{
}

class Teacher extends Person{
}

class Student extends Person{
}
public class test01 {
    public static void main(String[] args) {
 
        Object obj = new Student(); // 主要看这个对象是什么类型与实例化的类名
        System.out.println(obj instanceof Student); // true
        System.out.println(obj instanceof Person); // true
        System.out.println(obj instanceof Object); // true
        System.out.println(obj instanceof String); // false
        System.out.println(obj instanceof Teacher); // false  无关系
        System.out.println("========================");

        Person person = new Student();
        System.out.println(person instanceof Person); // true
        System.out.println(person instanceof Object); // true
        // System.out.println(person instanceof String); // 编译错误
        System.out.println(person instanceof Teacher); // false 无关系

    }
}

在这里插入图片描述

案例 3

指明商品比较大小的方式:按照价格从低到高排序,再按照产品名称从高到低排序

在这里插入图片描述

java.lang.ClassCastException(java强制类型转换异常)

举一个比较形象的例子:

  • Animal表示动物类,Dog表示狗类,是动物的子类,Cat表示猫类,是动物的子类。看下面的代码:

Animal a1 = new Dog(); // 1

Animal a2 = new Cat(); // 2

Dog d1 = (Dog)a1; // 3

Dog d2 = (Dog)a2; // 4

  • 第3行中是把狗转换成狗,所以可以。
  • 但是第4行代码将产生java.lang.ClassCastException
    原因是你要把一个猫(a2这只动物是猫)转换成狗,所以不行

小结:

  • 从上面的例子看,java.lang.ClassCastException是进行强制类型转换的时候产生的异常

1. 强制类型转换的 前提是 父类引用指向的对象的类型是子类的时候才可以进行强制类型转换

2. 如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常

可以通过if(o instanceof 类型)的语句来判断o的类型是什么。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐