isInstance是instanceof的“动态等效”是什么意思?

6

'动态等效'是什么意思?

我想知道为什么要使用this.getClass().isInstance(aClass)而不是this instanceof aClass?有什么区别吗?

确定指定的对象是否可以分配给此类所表示的对象。该方法是Java语言instanceof运算符的动态等效物。

2个回答

11

是的。不仅顺序不同,而且object instanceof Clazz必须有一个在编译时已知的类。 clazz.isInstance(object)可以接受在运行时已知的类。

还有微妙的区别,isInstance将自动装箱,但instanceof不会。

例如:

10 instanceof Integer // does not compile
Integer.class.isInstance(10) // returns true

Integer i = 10;
if (i instanceof String) // does NOT compile
if (String.class.isInstance(i)) // is false

为了看到区别,我建议您尝试使用它们。

注意:如果您执行 object.getClass().getClass()myClass.getClass(),您将只会得到一个 Class。请注意不要在不必要的情况下调用 getClass()


5
instanceof 运算符用于测试一个对象是否是一个固定(静态)类的实例,即在编译时已知其名称的类。 Class.isInstance 方法允许您对动态类进行测试;即只有在运行时才知道的类。

我想知道 this.getClass().isInstance(aClass)this instanceof aClass 相比有何不同?它们之间有区别吗?

isInstance 的目的如上所述。
这两个表达式之间的主要区别是:
  • 在第一个表达式中,aClass 是一个变量,其值是一个 Class 对象,而

  • 在第二个表达式中,aClass 是一个类的名称:它不能是一个变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接