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和isInstance的区别的更多相关文章

  1. instanceof 和isinstance的区别

    class A {} class B extends A {} class C extends A {} public class Test { public static void main(Str ...

  2. Java中instanceof和isInstance区别详解

     一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...

  3. Java中instanceof和isInstance的具体区别

    Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...

  4. instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系

    instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系          编程的时候可能会遇到一个不知道它属于哪个类的 ...

  5. java instanceof和isInstance的关系 精析

      1.instanceof 用途:判断这个object对象是不是这种Class类型. 语法: boolean result = object instanceof Class; 用法: 判断obje ...

  6. java 中 instanceof 和 isInstance区别

    两者的功能是等价的.区别: 1.instanceof 是一个操作符(类似new, ==等): 使用方法: if (ins instanceof String) { //logic } 2.isInst ...

  7. 【Java 基础】 instanceof和isInstance区别详解

    obj instanceof class 也就是说这个对象是不是这种类型, 1.一个对象是本身类的一个对象 2.一个对象是本身类父类(父类的父类)和接口(接口的接口)的一个对象 3.所有对象都是Obj ...

  8. instanceof、 isinstance 与 isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

  9. instanceof、isInstance、isAssignableFrom的区别

    https://stackoverflow.com/questions/3949260/java-class-isinstance-vs-class-isassignablefrom 1. MyCla ...

随机推荐

  1. C语言网络编程(Linux && Windows)(1)

    和朋友一起做课程设计,同时学习C语言的网络编程,以前写的都是python网络编程,但python很多的库都是封装好的,大部分人在使用的时候不会去了解底层的实现,这样对长远的学习不太好,也改正自己这方面 ...

  2. 团队展示——Part I

    1. 团队简介 队名:非专业团队

  3. AcWing 324. 贿赂FIPA

    题目链接 大型补档计划 \(f[i][j]\) 表示第 \(i\) 个国家,获得 \(j\) 个国家支持,用的最少花费 \(f[i][0] = 0\) \(f[i][sz[i]] = w[i]\) 对 ...

  4. 我对js数据类型的理解和深浅(copy)的应用场景

    本人毕业一所专科院校,所学专业是计算机应用技术,在大学时对前端有了一定的了解之后,觉得自己对前端的兴趣十分强烈,开始自学前端,一路上也是坎坎坷坷,也有想要放弃的时候,还好坚持了下来,并且从事前端开发已 ...

  5. WebService-问题

    1.引用问题 在用C#对接webservice的时候,常用的方法是下载vs中引用webservice的地址.然后,new对应的client就可以使用了.但在,实际应用中往往会遇到webservice访 ...

  6. Jmeter(10)逻辑控制器

    逻辑控制器可以控制采样器的执行顺序,所以控制器需要和采样器一起使用 Jmeter中的逻辑控制器分为两类 1.控制测试计划执行过程中节点的逻辑顺序,如循环控制器.If控制器 2.对测试计划中的脚本进行分 ...

  7. 在Nuxt中使用react-id-swiper封装公共的轮播图组件(移动端

    首先就是引入swiper import Swiper from 'react-id-swiper': 一个轮播图首先要考虑到一种情况就是当只有一张图的时候是不是需要按轮播图来处理 一般情况下,一张图是 ...

  8. 【UV统计】海量数据统计的前世今生

    转载请注明出处 背景 在互联网公司中,每个项目都需要数据统计.分析,便于项目组利用详细数据研究项目的整体情况,进行下一步的调整.在数据统计中,UV统计是最常见的,也是最普遍的.有的场景要求实时性很高, ...

  9. 关于django python manage.py startapp 应用名 出错异常原因

    如题,在控制台运行python manage.py startapp sales 建立一个应用报错异常 1.应用名不能包含下划线等字符 所以app-demo 不能作为应用名被定义 2.manage.p ...

  10. AWT08-绘图

    1.组件绘图原理 Java GUI能展示出不同对话框.窗口等等组件外观的本质其实就是绘图. 在AWT中,真正提供绘图功能的是Graphics对象,在Component中提供了三个方法来完成组件图形的绘 ...