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番目です。