1

这段代码

    String s1,s2;
    if(s1 instanceof s2) {

    }

给我错误:不兼容的条件操作数类型 String 和 s2。谁能告诉我我做错了什么?

4

3 回答 3

6

您需要此运算符右侧的Class ,而不是class 的实例

对于运行时检查一个对象是否是另一个对象的类的实例,您可以使用Class 类中的工具:

if(s2.getClass().isAssignableFrom(s1.getClass))

...

isAssignableFrom(类 cls)

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。

或者有isInstance(Object)类似情况的呼吁:

if(s2.getClass().isInstance(s1))
 ....

isInstance(对象 obj)

确定指定的 Object 是否与该 Class 表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。

于 2013-09-20T08:51:35.510 回答
4

你不能变量instanceof(至少不能在右侧)。

类需要在编译时知道,例如

 if (x instanceof String)

如果那是不可能的,你可以做

 if (s2.getClass().isInstance(s1))

(注意这里的参数顺序颠倒了)。

但是,通常,您不需要在设计良好的代码中做任何事情。更多的上下文可能会导致更好的答案。

于 2013-09-20T08:51:59.703 回答
0

你做错了,如果你看到 Oracle 教程:

instanceof 运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例

所以instanceof的右手边应该是Class,一个子类或者一个实现接口的类。试试这样,这应该工作

if(s1 instance of String) //Since you have specified s1 as a string.

您还需要分配给一个字符串,否则它不会编译。

于 2013-09-20T08:56:23.557 回答