它是什么意思isInstance是instanceof的"动态等价物"?

use*_*016 6 java class instanceof

什么意思'动态等价'?

我只是想知道this.getClass().isInstance(aClass)取代的目的是this instanceof aClass什么?有区别吗?

确定指定的Object是否与此Class表示的对象分配兼容.此方法是Java语言instanceof运算符的动态等效项

Pet*_*rey 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
Run Code Online (Sandbox Code Playgroud)

为了看到差异,我建议你尝试使用它们.

注意:如果你这样做,object.getClass().getClass()或者myClass.getClass()你会得到一个Class小心不要getClass()在你不需要的时候打电话.


Ste*_*n C 5

instanceof运算符测试对象是否是固定(静态)类的实例;即一个在编译时名称已知的类。

Class.isInstance方法允许您针对动态类进行测试;即仅在运行时才知道的类。


我只是想知道有什么目的this.getClass().isInstance(aClass)而不是this instanceof aClass?有区别吗?

其目的isInstance如上。

这两个表达式之间的主要区别是:

  • 第一个aClass是一个值为对象的变量Class,并且

  • 第二个aClass是类的名称:它不能是变量。