哪个更快:instanceof 还是 isInstance?

What's faster: instanceof or isInstance?

抛开设计问题,什么在现代 JVM 上执行得更快?

foo instanceof Bar

Bar.class.isInstance(foo)

为什么?

foo instanceof Bar 应该会更快。

如果编译时不清楚你有哪个class,你可以使用Bar.class.isInstance(foo)

考虑以下因素:

void test(Object o1, Object o2) {
   o1.getClass().isInstance(o2);
}

在此示例中,JVM 在运行时决定哪个 class 调用该方法。 使用 instanceof 这是不可能的。

所以如果你在编译时知道 class 你应该使用 instanceof

Class.isInstance 是 JVM 固有的。它被编译为与 instanceof 完全相同的序列(来自 HotSpot 源代码的证明:1, 2)。也就是说,它们在性能方面是相等的。