instanceof - 为什么在比较不兼容类型时它不编译?

问题描述 投票:0回答:2
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 的验证),那么它会更有用......不是吗?

或者我遗漏了一些明显的东西?

java instanceof
2个回答
22
投票

这是一个编译错误,符合JLS §15.20.2

如果从 RelationalExpressionReferenceType 的强制转换将被视为编译时错误而被拒绝,则

instanceof
关系表达式同样会产生编译时错误。在这种情况下,
instanceof
表达式的结果永远不可能为真。

RelationalExpression

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


2
投票

除了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 不是一个角色

© www.soinside.com 2019 - 2024. All rights reserved.