什么更快:instanceof或isInstance?

时间:2016-04-05 19:44:48

标签: java jvm instanceof

除了设计问题,在现代JVM上执行速度更快的是什么?

foo instanceof Bar

Bar.class.isInstance(foo)

为什么?

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

foo instanceof Bar应该更快。

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

考虑以下事项:

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

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

因此,如果您在编译时知道该类,则应使用instanceof