问题
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?
回答1:
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.
回答2:
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