instanceof后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类)
instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。
package chap5_7;
public class InstanceofTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object hello="hello";
System.out.println("字符串是否是Object类的实例"+(hello instanceof Object));
System.out.println("字符串是否是String类的实例"+(hello instanceof String));
System.out.println("字符串是否是Math类的实例"+(hello instanceof Math));
System.out.println("字符串是否是Comparable类的实例"+(hello instanceof Comparable));
String a="Hello";
System.out.println("字符串是否是Math类的实例"+(hello instanceof Math));
}
}
运行结果
字符串是否是Object类的实例true
字符串是否是String类的实例true
字符串是否是Math类的实例false
字符串是否是Comparable类的实例true
字符串是否是Math类的实例false
如果使用String a=”Hello”;代码定义的变量a,就不能执行a instanceof Math,因为a的编译类型是String,String 类型既不是Math类型,也不是Math类型的父类,所以这行代码编译就会出错。
在进行强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以成功转换,从而保证代码更加健壮。