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"));
}
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!