此代码
String s1,s2;
if(s1 instanceof s2) {
}
给我错误: 不兼容的条件操作数类型String和s2。谁能告诉我我做错了什么?
答案 0 :(得分:6)
您需要在此运算符的右侧使用类,而不是类的实例。
对于运行时检查对象是否是另一个对象类的实例,您可以使用Class class中的工具:
if(s2.getClass().isAssignableFrom(s1.getClass))
...
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。
或isInstance(Object)
呼吁出现类似情况:
if(s2.getClass().isInstance(s1))
....
确定指定的Object是否与此Class表示的对象分配兼容。此方法是Java语言instanceof运算符的动态等效方法。
答案 1 :(得分:4)
instanceof
中不能包含变量(至少不在右侧)。
需要在编译时知道类,例如
if (x instanceof String)
如果无法做到,你可以做到
if (s2.getClass().isInstance(s1))
(注意参数顺序在此处相反)。
但是,通常,您不需要在设计良好的代码中执行任何操作。更多的背景可能会带来更好的答案。
答案 2 :(得分:0)
如果你看到Oracle教程,你做错了:
instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例
因此,instanceof的右侧应该是Class,子类或实现接口的类。 尝试这样,这应该工作
if(s1 instance of String) //Since you have specified s1 as a string.
此外,您需要分配一个字符串,否则它将无法编译。