2

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

String s = "abc";

Class<?> classType = String.class;

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

作为替代方案:

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

会有任何性能优势吗?

4

2 回答 2

14

你所做的实际上并不相同。考虑子类会发生什么(我知道你不能 subclass String,所以在这种String情况下没关系)。

class A {}
class B extends A {}

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

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

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

于 2012-08-01T01:54:52.833 回答
3

还有

Class<?> classType = String.class;

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

至于性能,我希望这些之间的差异可以忽略不计。

于 2012-08-01T01:52:57.417 回答