Java の instanceof - 互換性のない型を比較す​​るときにコンパイルされないのはなぜですか? 質問する

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

false私が理解できないのは、なぜコンパイラが またはを返す代わりにエラーをスローするのかということですtrue

コンパイラが または を返す場合false(trueつまり、instanceof操作を通常の if ベースの検証のように扱う場合)、それははるかに便利になりませんか?

それとも何か明らかなことを見逃しているのでしょうか?

ベストアンサー1

これはコンパイルエラーですJLS §15.20.2:

もし、関係式参照タイプコンパイル時エラーとして拒否される場合、instanceof関係式も同様にコンパイル時エラーを生成します。このような状況では、instanceof式の結果が真になることは決してありません。

関係式instanceofは、およびの最初のオペランドです。参照タイプ2番目です。

おすすめ記事