• 第十四章 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)方法其实比较的是对象引用是否从属于某个类,而不是比较对象是否从属于某类。

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    TensorFlow 使用预训练好的卷积神经网络和循环神经网络(lstm)模型处理图片转文字(im2txt)
    45度做人,90度做事,180度为人,360度处事
    SQL Server 和 Oracle 数据类型对应关系
    SQL Server 创建数据库
    SQL Server 2012 忘记sa用户处理方法
    剑指offer50:数组中重复的数字
    剑指offer49:把字符串转换成整数
    剑指offer48:不用加减乘除做加法
    剑指offer47:位运算+递归。求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
    剑指offer46:圆圈中最后剩下的数字(链表,递归)
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/9325950.html
Copyright © 2020-2023  润新知