zoukankan      html  css  js  c++  java
  • 第十四章 instanceof 与 isInstance

    在运行时识别一个对象的类型:instanceof,其返回一个boolean值,表示对象是不是某个特定类型的实例。

    用法:a instanceof B

    表示:对象实例a是否属于类B,或者是否是B的派生类

    instanceof的使用有严格的限制,只可将其与命名类型【即class类】进行比较,而不能与Class对象【即class类的对象】作比较。

    package 类型信息.类的加载;
    
    public class Fruit{
    
    }
    
    public class Apple extends Fruit{
    
    }
    package 类型信息.类的加载;
    
    /**
     * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
     * 
     * a.getClass().isinstance(b)
     * 
     * @author admin
     *
     */
    public class InstanceTest {
    
        public static void main(String[] args) {
            
            Apple a = new Apple();
            Fruit f = new Fruit();
            Fruit fru = new Apple();
            
            System.out.println(a instanceof Object);
            System.out.println(a instanceof Apple);
            System.out.println(a instanceof Fruit);
            System.out.println(f instanceof Apple);
            
        }
        
    }

    控制台:

    true
    true
    true
    false

    class.isInstance(Object obj)相对于instanceof要灵活一些,至少你可以传递参数去判断某class是否属于参数指定的对象实例或类字面常量。

    用法:A.class.isInstance(b)  或 a.getClass().isInstance(b),其中参数如果是类字面量或obj.getClass()这种用法没有任何意义。

     1 package 类型信息.类的加载;
     2 
     3 /**
     4  * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
     5  * 
     6  * a.getClass().isInstance(b) 或 A.Class.isInstance(b)
     7  * 
     8  * @author admin
     9  *
    10  */
    11 public class InstanceTest {
    12 
    13     public static void main(String[] args) {
    14         
    15         System.out.println("==========1==========");
    16         
    17         Apple a = new Apple();
    18         Fruit f = new Fruit();
    19         Fruit fru = new Apple();
    20         
    21         System.out.println(a instanceof Object);
    22         System.out.println(a instanceof Apple);
    23         System.out.println(a instanceof Fruit);
    24         System.out.println(f instanceof Apple);
    25         
    26         System.out.println("==========2==========");
    27         
    28         System.out.println(Apple.class.isInstance(a));
    29         System.out.println(Apple.class.isInstance(f));
    30         System.out.println(Apple.class.isInstance(fru));
    31         
    32         System.out.println("==========3==========");
    33         System.out.println(a.getClass().isInstance(a));
    34         System.out.println(a.getClass().isInstance(f));
    35         System.out.println(a.getClass().isInstance(fru));
    36         
    37     }
    38     
    39 }
    ==========1==========
    true
    true
    true
    false
    ==========2==========
    true
    false
    true
    ==========3==========
    true
    false
    true

    从结果可以看出:使用isInstance(obj)方法其实比较的是对象引用是否从属于某个类,而不是比较对象是否从属于某类。

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    linux strace 命令详解
    Redis执行Lua脚本示例
    getconf
    rc.sysinit 解析
    Linux系统启动内幕
    syslinux 和 grub
    isolinux.cfg 文件是干什么的
    C++中构造函数调用构造函数
    static和extern的作用域--题目
    构造函数与析构函数不能被继承
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/9325950.html
Copyright © 2011-2022 走看看