instanceof和isInstance的区别
Posted liaowenhui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于instanceof和isInstance的区别的主要内容,如果未能解决你的问题,请参考以下文章
Java中instanceof和isInstance区别详解
instanceOf与isInstance()方法之间的区别