foo instanceof Bar 应该更快。 如果在编译时不清楚你拥有哪个类,可以使用 Bar.class.isInstance(foo)。 考虑以下内容: void test(Object o1, Object o2) { o1.getClass().isInstance(o2); } 在这个例子中,JVM会在运行时决定哪个类调用该方法。使用instanceof是不可能的。因此,如果您在编译时知道类,应该使用instanceof。
Class.isInstanceOf()
是OpenJDK中的内在方法(可能也是每个现代VM中的内在方法),这意味着它尽可能快。另一方面,instanceof
有自己的字节码操作,因此它可能甚至更快。Hotspot如何优化对每个调用的处理是另一回事。 - biziclopClass.isInstance
是JVM内部函数,在编译时会被转换成与instanceof
完全相同的指令序列(从HotSpot源代码的证明可以看出:1, 2)。也就是说,它们在性能上完全相同。 - apangin