instanceof 是java的保留关键字。他的作用就是测试左边的对象是不是右边类的实例,是的话就返回true,不是的话返回false。
也就是说,比如一个表达式:
boolean b = object instanceof class左边是对象,右边是类,结果是boolean。
这里要注意:
类的实例包括本身的实例,以及所有直接或间接子类的实例 instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
用法:
左边的对象实例不能是基础数据类型(也就是八种基本数据类型,String 可以):

左边的对象和右边的类不在同一个继承树上。

null用
instanceof跟任何类型比较,是返回false,而不是编译错误。
测试:
public static void main(String[] args) { A a = null; B b = null; boolean result; result = a instanceof A; System.out.println(result); // 结果:false null用instanceof跟任何类型比较时都是false result = b instanceof B; System.out.println(result); // 结果:false null用instanceof跟任何类型比较时都是false a = new B(); b = new B(); result = a instanceof A; System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支 result = a instanceof B; System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支 result = b instanceof A; System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支 result = b instanceof B; System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支 B b2 = new C(); result = b2 instanceof A; System.out.println(result); // 结果:true b2是父类B引用指向子类C,类B实现了接口A,所以属于同一个继承树分支 result = b2 instanceof B; System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支 result = b2 instanceof C; System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支 } }
instanceif 一般用于对象类型强制转换:
public class C extends B { private void print(Object a) { System.out.println(a+" instanceof"); } public void convert(String b) { if (b instanceof Object) { this.print(b); } } } public class InstanceofTest4 { public static void main(String[] args) { C c = new C(); c.convert("aa"); } }