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")); }
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/9803218.html