java instanceof 区别_Java 中 instanceof 和 isInstance 的区别

今天百度了一下 instanceof 和 isInstance() 的区别,结果不理想。大多数人先贴一段测试代码,然后分别解释它们的用法,根本不是解释它们之间的区别。

本来想快点搜一下看个结论,不料还是被迫自己研究了一下。

先说结论,很简单:

instanceof 是静态比较。instanceof 后面的类名在编译时就已知且固定了,即 obj instanceof ClassA,ClassA 必须是已经存在的类名,不然编译都过不了。

isInstance() 是动态比较。isInstance() 的左边可以在运行时决定,即可以这样 objA.getClass().isInstance(objB),objA 可以作为某个方法的参数被传进来,这样可以动态的看两个对象是否类型兼容。

这是主要区别,如果硬要扯其它区别还有 instanceof 是 Java 内置的比较运算符,isInstance() 是个方法。

最后附一段测试代码(只示例用法,体现不了区别。注意子类和null):

class A {}

class B extends A {}

class C extends A {}

public class InstanceofDemo

{

public static void main(String args[])

{

A a = new A();

B b = new B();

C c = new C();

System.out.println("a instanceof A: " + (a instanceof A)); //true

System.out.println("b instanceof A: " + (b instanceof A)); //true

System.out.println("c instanceof A: " + (c instanceof A)); //true

System.out.println("a instanceof B: " + (a instanceof B)); //false

System.out.println("null instanceof A: " + (null instanceof A)); //false

System.out.println("a.getClass().isInstance(a): " + a.getClass().isInstance(a)); //true

System.out.println("a.getClass().isInstance(b): " + a.getClass().isInstance(b)); //true

System.out.println("b.getClass().isInstance(c): " + b.getClass().isInstance(c)); //false

System.out.println("b.getClass().isInstance(null): " + b.getClass().isInstance(null)); //false

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值