哪个更快: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)。也就是说,它们在性能方面是相等的。
抛开设计问题,什么在现代 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)。也就是说,它们在性能方面是相等的。