zoukankan      html  css  js  c++  java
  • 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

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    leetcode-409
    leetcode-836
    leetcode-1160
    leetcode-面试题13
    leetcode-695
    go的一些小lib
    leetcode-300
    cookie
    php上传文件
    PHP 文件创建/写入
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/12248544.html
Copyright © 2011-2022 走看看