instanceof和isInstance的区别

instanceof 是一个操作符(类似new, ==等)

( Object reference variable ) instanceof  (class/interface type)

if(a instanceof B){
}

表示:a 是不是 B 这种类型

用法:

1. 一个对象是本身类的一个对象

2. 一个对象是本身类所继承类(父类的父类)和接口(接口的接口)的一个对象

3. 所有对象都是Object

4. 凡是null有关的都是false  null instanceof(class)

下面是一个例子:

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

isInstance是Class类的一个方法

class.isInstance (obj)

if(B.Class.isInstance (a)){

};

表示:a 是否能强转为 B 类型

类名.class和对象.getClass()几乎没有区别,因为一个类被类加载器加载后,就是唯一的一个类。

用法:

1. 一个对象是本身类的一个对象

2. 一个对象能被转化为本身类所继承类(父类的父类等)和实现的接口(接口的父接口)强转

3. 所有对象都能被Object的强转

4. 凡是null有关的都是false   class.isInstance(null)

实例

 1 interface A {
 2 }
 3  
 4 class B {
 5 }
 6  
 7 class C implements A {
 8 }
 9  
10 class D extends B {
11 }
12  
13 public class TestInstanceof {
14  
15     public static void main(String[] args) {
16         C t1 = new C();
17         D t2 = new D();
18  
19         // obj instanceof class:这个对象是不是这种类型.
20         // 测试1:一个对象是本身类的一个对象
21         System.out.println(t1 instanceof C); // true
22         System.out.println("============");
23  
24         // 测试2:一个对象是本身类父类(父类的父类)和接口的一个对象
25         System.out.println(t1 instanceof A); // true
26         System.out.println(t2 instanceof D); // true
27         System.out.println("============");
28  
29         // 测试3:所有对象都是object
30         System.out.println(t1 instanceof Object); // true
31         System.out.println(t2 instanceof Object); // true
32         System.out.println("============");
33  
34         // 测试4:凡是null相关的都是false
35         System.out.println(null instanceof Object); // false
36         System.out.println(null instanceof B); // true
37         System.out.println("============");
38  
39         // class.isInstance(obj):这个对象能不能被转化为这个类
40         // 测试1:一个对象是本身类的一个实例
41         System.out.println(C.class.isInstance(t1)); // true
42         System.out.println("============");
43  
44         // 测试2:一个对象能被转化为本身类所继承的类(父类的父类)和实现的接口(接口的父接口)强转
45         System.out.println(A.class.isInstance(t1)); // true
46         System.out.println(B.class.isInstance(t2)); // true
47         System.out.println("============");
48  
49         // 测试3:所有对象都能被Object强转
50         System.out.println(Object.class.isInstance(t1)); // true
51         System.out.println(Object.class.isInstance(t2)); // true
52         System.out.println("============");
53  
54         // 测试4:凡是和null相关的都是false
55         System.out.println(Object.class.isInstance(null)); // false
56         System.out.println(D.class.isInstance(null)); // false
57  
58  
59     }
60 }

运行结果:

 1 true
 2 ============
 3 true
 4 true
 5 ============
 6 true
 7 true
 8 ============
 9 false
10 false
11 ============
12 true
13 ============
14 true
15 true
16 ============
17 true
18 true
19 ============
20 false
21 false

参考/补充: 

参考--Java中的instanceof和isInstance基础讲解

https://www.2cto.com/kf/201803/732851.html

补充--菜鸟教程-- instanceof 运算符

https://www.runoob.com/java/java-operators.html

上一篇:Spring中bean的生命周期(最详细)


下一篇:instanceof运算符