Java instanceof运算符

时间:2012-08-01 01:49:43

标签: java instanceof comparison-operators

是否有可以与instanceof运算符一起使用的有效类Type变量?例如:

String s = "abc";

Class<?> classType = String.class;

if (s instanceof classType) {
    //do something
}

作为替代方案:

if (s.getClass() == classType) {
    //do something
}

是否会有任何性能优势?

2 个答案:

答案 0 :(得分:14)

你所做的事情实际上并不相同。考虑子类会发生什么(我知道你不能继承String,所以在String的情况下它并不重要。)

class A {}
class B extends A {}

B b = new B();
b instanceof A // true
b.getClass() == A.class // false

如果您有一个对象,并且想要知道它是否是某个类型的实例并且您拥有Class对象,则可以使用Class#isInstance方法。

在任何一种情况下,我都希望性能差异微不足道。

答案 1 :(得分:3)

还有

Class<?> classType = String.class;

if (classType.isInstance(s)) {...

至于表现,我希望其中任何一个之间的差异可以忽略不计。