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 的验证),那么它会更有用......不是吗?
或者我遗漏了一些明显的东西?
这是一个编译错误,符合JLS §15.20.2:
如果从 RelationalExpression 到 ReferenceType 的强制转换将被视为编译时错误而被拒绝,则
关系表达式同样会产生编译时错误。在这种情况下,instanceof
表达式的结果永远不可能为真。instanceof
RelationalExpression 是
instanceof
的第一个操作数,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 不是一个角色