java is instance of_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"));

}

写在最后

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

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值