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
instanceofrelational expression likewise produces a compile-time error. In such a situation, the result of theinstanceofexpression 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