Java中的instanceof – 为什么不编译?

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

我无法理解的是编译器抛出错误而不是返回falsetrue

如果编译器返回falsetrue (即将instanceof操作视为常规的基于if的validation),那么它会更有用..它不会吗?

还是我错过了一些明显的东西?

根据JLS§15.20.2,这是一个编译错误:

如果将RelationalExpression转换为ReferenceType将作为编译时错误被拒绝,则关系表达式的instanceof同样会产生编译时错误。 在这种情况下, instanceof表达式的结果永远不会成立。

RelationalExpressioninstanceof的第一个操作数, ReferenceType是第二个。

除了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