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?
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 theinstanceof
expression could never be true.
RelationalExpression is the first operand of instanceof
and ReferenceType is the second.
In addition to the arshajii's answer if you want to avoid compile-time error and want run-time true/false result for checking whether var is instance of Character then use code like this:
if(var.getClass().isAssignableFrom(Character.class))
System.out.println("var is a Character");
else
System.out.println("var is NOT a Character");
As you would expect it will print:
var is NOT a Character
来源:https://stackoverflow.com/questions/18548436/instanceof-in-java-why-doesnt-this-compile