Java 中的 instanceof 运算符用来在运行时指出对象是否是特定类的一个实例。本文简要介绍下 instanceof 运算符的用法和注意事项。

基本用法

1
result = object instanceof class

参数:

result - boolean 类型

object - 必选项,任意对象实例

class - 任意已定义的对象类

说明:

如果 object 是 class 的一个实例,则 instanceof 运算符返回 true,反之若 object 不是指定 class 的一个实例或 object 为 null,则返回 false。

例子:

以下示例展示了实现、继承关系的类实例使用 instanceof 运算符的结果。

1
2
3
4
5
6
7
8
9
10
11
interface A {

}

class B implements A {

}

class C extends B {

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A a = null;
B b = null;
System.out.println("null instanceof A:" + (a instanceof A));
System.out.println("null instanceof B:" + (b instanceof A));

a = new B();
b = new B();
System.out.println("a instanceof A:" + (a instanceof A));
System.out.println("a instanceof B:" + (a instanceof B));
System.out.println("b instanceof A:" + (b instanceof A));
System.out.println("b instanceof B:" + (b instanceof B));

B b2 = (C) new C();
System.out.println("b2 instantceof A:" + (b2 instanceof A));
System.out.println("b2 instantceof B:" + (b2 instanceof B));
System.out.println("b2 instantceof C:" + (b2 instanceof C));

结果:

1
2
3
4
5
6
7
8
9
null instanceof A:false
null instanceof B:false
a instanceof A:true
a instanceof B:true
b instanceof A:true
b instanceof B:true
b2 instantceof A:true
b2 instantceof B:true
b2 instantceof C:true

特别说明

  1. null instanceof 任何类结果均为 false
  2. 对象类不包含 int、double 等基本类型
  3. 大多数情况下 instanceof 并不是推荐的做法,更推荐利用多态及方法重载