ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

instanceof和isInstance的区别

2020-02-01 15:03:13  阅读:237  来源: 互联网

标签:instanceof 区别 System println isInstance true class out


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

标签:instanceof,区别,System,println,isInstance,true,class,out
来源: https://www.cnblogs.com/liaowenhui/p/12248544.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有