码迷,mamicode.com
首页 > 编程语言 > 详细

java instanceof和isInstance的关系 精析

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

标签:targe   bool   用法   pes   tar   string   2018年   str   运算符   

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的关系 精析

标签:targe   bool   用法   pes   tar   string   2018年   str   运算符   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!