class A {
public static void main(String...args) {
Integer var = 10;
if(var instanceof Character) // Line1
System.out.println("var is a Character");
}
}
我知道第1行将无法编译,因为编译器发现var
不是Character
。
我无法理解的是编译器抛出错误而不是返回false
或true
的原因。
如果编译器返回false
或true
(即将instanceof
操作视为常规的基于if的验证),那么它会更有用..它不会吗?< / p>
或者我错过了一些明显的东西?
答案 0 :(得分:18)
根据JLS §15.20.2:
,这是一个编译错误如果将 RelationalExpression 转换为 ReferenceType 作为编译时错误被拒绝,那么
instanceof
关系表达式同样会产生编译时错误。在这种情况下,instanceof
表达式的结果永远不会成立。
RelationalExpression 是instanceof
的第一个操作数, ReferenceType 是第二个。
答案 1 :(得分:3)
除了arshajii的答案如果你想避免编译时错误并希望运行时的真/假结果来检查var是否是Character的实例,那么使用这样的代码:
if(var.getClass().isAssignableFrom(Character.class))
System.out.println("var is a Character");
else
System.out.println("var is NOT a Character");
正如您所料,它会打印出来:
var is NOT a Character