首页 > 编程语言 > 详细

java instanceof和isInstance的关系 精析

时间:2018-10-17 14:17:21      阅读:186      评论:0      收藏:0      [点我收藏+]

Created by Marydon on

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

  

 相关推荐:

 

java instanceof和isInstance的关系 精析

原文:https://www.cnblogs.com/Marydon20170307/p/9803218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!