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"));
}

  

写在最后

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

 相关推荐:

 

posted @ 2018-10-17 11:50  Marydon  阅读(544)  评论(0编辑  收藏  举报