• java instanceof和isInstance的关系 精析


    1.instanceof

      用途:判断这个object对象是不是这种Class类型。

      语法:

    boolean result = object instanceof Class;

      用法:

      判断object对象是否是class类(本身类);

      判断object对象是否是本身类所继承的类(父类);

      判断object对象是否是本身类所实现的接口;

      所有的对象都是Object类;

      凡是null相关的都是false。

      示例: 

      共用代码

    /**
     * 机器
     * @explain
     * @author Marydon
     * @creationTime 2018年10月17日上午9:32:01
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    class Machine {
    	
    }
    
    /**
     * 电脑
     * @explain
     * @author Marydon
     * @creationTime 2018年10月17日上午9:32:14
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    class Computer extends Machine {
    	
    }
    
    /**
     * usb接口
     * @explain
     * @author Marydon
     * @creationTime 2018年10月17日上午9:32:27
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    interface Usb {
    	
    }
    
    /**
     * 鼠标
     * @explain
     * @author Marydon
     * @creationTime 2018年10月17日上午9:32:39
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    class Mouse implements Usb{
    	
    }
    
    /**
     * 测试instanceof与isInstance()
     * @explain
     * @author Marydon
     * @creationTime 2018年10月17日上午9:25:15
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    public class TestInstance {
        // main方法    
    }
    

      测试

    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse = new Mouse();
        
        System.out.println("==============instanceof阶段测试1==============");
        // 判断object对象是否是class类(本身类)
        System.out.println(computer instanceof Computer);
        // 判断object对象是否是本身类所继承的类(父类)
        System.out.println(computer instanceof Machine);
        // System.out.println(computer instanceof Mouse);// 编译报错:Incompatible conditional operand types Computer and Mouse
        // 判断object对象是否是本身类所实现的接口
        System.out.println(mouse instanceof Usb);
        // System.out.println(mouse instanceof Machine);// 编译报错
        
        System.out.println("==============instanceof阶段测试2==============");
        // 所有的对象都是Object类
        System.out.println(computer instanceof Object);
        System.out.println(mouse instanceof Object);
        
        System.out.println("==============instanceof阶段测试3==============");
        // 凡是null相关的都是false
        System.out.println(null instanceof Object);// false
        System.out.println(null instanceof Computer);// false
    }

    2.isInstance

      用途:判断这个object对象能不能被转化为这个Class类。

      语法:

    boolean result = Class.class.isInstance(object);

      用法:

      判断object对象能否转化成class类(本身类);

      判断object对象能否转化成本身类所继承的类(父类);

      判断object对象能否转化成本身类所实现的接口;

      所有的对象都转换成Object类;

      凡是null相关的都是false。

      示例: 

    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse = new Mouse();
        
        System.out.println("==============isInstance阶段测试1==============");
        // 判断object对象能否转化成class类(本身类)
        System.out.println(Computer.class.isInstance(computer));
        // 判断object对象能否转化成本身类所继承的类(父类)
        System.out.println(Machine.class.isInstance(computer));
        // 明显不能这样比较,但编译通过
        System.out.println(Mouse.class.isInstance(computer));// false
        
        // 判断object对象能否转化成本身类所实现的接口
        System.out.println(Usb.class.isInstance(mouse));
        
        // 明显不能这样比较,但编译通过
        System.out.println(Machine.class.isInstance(mouse));// false
        
        System.out.println("==============isInstance阶段测试2==============");
        // 所有的对象都转换成Object类
        System.out.println(Object.class.isInstance(computer));
        System.out.println(Object.class.isInstance(mouse));
        
        System.out.println("==============isInstance阶段测试3==============");
        // 凡是null相关的都是false
        System.out.println(Object.class.isInstance(null));// false
        System.out.println(Computer.class.isInstance(null));// false
    }  

    3.区别与联系

      区别:

      instanceof是一个操作符,isInstance是Class类的一个方法;

      instanceof表示对象A是不是B类型,isInstance表示对象A是否能强转成B类型;

      instanceof 编译器在编译时需要知道类的具体类型,isInstance 编译器在运行时才进行类型检查,故可用于反射,泛型中。

      联系:

      isInstance()是 Java 语言 instanceof 运算符的动态等效方法。

      示例:

    public static void main(String[] args) {
        System.out.println("==============instanceof和isInstance==============");
        // 区别
        // System.out.println(1 instanceof String);// 编译不通过
        System.out.println(String.class.isInstance(1));// false
        
        // 联系
        System.out.println("Marydon" instanceof String); 
        System.out.println(String.class.isInstance("Marydon"));
    }
    

      

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    适配器模式
    自己DIY word2010脚注和尾注没有的格式
    Linux单网卡,双IP,双网关配置,并搭建squid proxy上网
    about using gnuplot
    ReadDirectoryChangesW 函数 流沙
    Jquery easyui 异步树 流沙
    Overlapped I/O 学习 流沙
    jQuery.get(url,[data],[callback]) 流沙
    MsgWaitForMultipleObjectsEx用法 流沙
    Oracle smon_scn_time 表 说明
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9803218.html
Copyright © 2020-2023  润新知