instanceof 和 Class.isAssignableFrom(...) 之间有什么区别?

2022-08-31 04:25:04

以下哪项更好?

a instanceof B

B.class.isAssignableFrom(a.getClass())

我所知道的唯一区别是,当“a”为null时,第一个返回false,而第二个则引发异常。除此之外,它们总是给出相同的结果吗?


答案 1

使用 时,您需要知道 编译时 的类。使用时,它可以是动态的,并在运行时更改。instanceofBisAssignableFrom()


答案 2

instanceof只能与引用类型一起使用,而不能与基元类型一起使用。 可以与任何类对象一起使用:isAssignableFrom()

a instanceof int  // syntax error
3 instanceof Foo  // syntax error
int.class.isAssignableFrom(int.class)  // true

请参阅 http://java.sun.com/javase/6/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)。