instanceof何时返回FALSE?

abc*_*112 8 java instanceof

我知道当对象是特定类的实例时,instanceof返回TRUE.例如:

B extends A
C extends A

B b = new B();
C c = new C();

b instanceof A // returns TRUE
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好,所以让我们输入看起来应该返回false的东西:

c instanceof B // won't compile (error: inconvertible types)
Run Code Online (Sandbox Code Playgroud)

这不编译,这是有道理的,因为它允许在编译时捕获疏忽.但是,当DOES instanceof实际返回false时?似乎只有两个选项是TRUE和ERROR.我能想到的唯一例外是:

null instanceof A // returns FALSE
Run Code Online (Sandbox Code Playgroud)

但是通过与上面相同的逻辑,似乎应该在编译时捕获它.

我在这里错过了什么?true/error是唯一可行的选项,还是可以以更有意义的方式实际返回false,除了将null作为引用变量给出?

Oli*_*rth 8

这是一个评估为false的示例:

class A {}
class B extends A {}

A a = new A();
a instanceof B   // false
Run Code Online (Sandbox Code Playgroud)

现场演示:http://ideone.com/cQltqE.


ajb*_*ajb 5

除了其他答案:任何时候左边的表达式或右边的类型都是一个接口,那么instanceof 可能是真的,所以编译器必须允许它.所以很容易想出一些错误的例子.