instanceof in Java - why doesn't it compile when comparing incompatible types?

instanceof, java

Solution

It's a compilation error in accordance with JLS §15.20.2:

If a cast of the RelationalExpression to the ReferenceType would be rejected as a compile-time error, then the `instanceof` relational expression likewise produces a compile-time error. In such a situation, the result of the `instanceof` expression could never be true.

RelationalExpression is the first operand of `instanceof` and ReferenceType is the second.

Problem

``` class A { public static void main(String...args) { Integer var = 10; if(var instanceof Character) // Line1 System.out.println("var is a Character"); } } ``` I know Line 1 will not compile because the compiler has found that `var` is not a `Character`. What I fail to understand is why the compiler throws an error instead of returning `false` or `true`. If the compiler returns `false` or `true` (i.e treating the `instanceof` operation like a regular if-based validation), then it be much more useful.. would it not? Or am I missing something obvious?

Original source

Related problems