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用法
规则:
- 左边的对象实例不能是基础数据类型
- 左边的对象实例和右边的类不在同一个继承树上
- 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的类型是什么。