Java instanceof运算符

Java instanceof运算符,java,Java,为什么Foo[]false?。它是Bar的一个实例。即使是Face也是有效的,因为Bar类实现了它。同一类的两个对象也可以使用instanceof. 使用instanceof运算符的操作数和结果 First Operand instanceof Operand Result (正在测试的引用)(我们正在比较的类型 (反对的参考) Foo[]表示“Foo数组”,而Foo[]不是Foo、Bar或Face的子类型 但是,Foo[]是对象的子类型,因为

为什么
Foo[]
false
?。它是
Bar
的一个实例。即使是
Face
也是有效的,因为
Bar类实现了它。同一类的两个对象也可以使用
instanceof.

使用instanceof运算符的操作数和结果

First Operand              instanceof Operand             Result
(正在测试的引用)(我们正在比较的类型 (反对的参考)

Foo[]
表示“Foo数组”,而
Foo[]
不是
Foo
Bar
Face
的子类型

但是,
Foo[]
对象的子类型,因为所有引用都是
对象的子类型,数组类型是引用类型

Foo[1]
意味着(我猜想)一个
Foo[]
实例的第二个元素。
Foo
数组元素的概念类型是
Foo
。而
Foo
是所有这些类型的子类型


null
值不是技术意义上的任何引用类型的实例。(当您将
null
赋值给引用变量时,
null
文本被转换为引用变量的类型……)这种情况有点出乎意料(对于新的Java程序员来说),但它是如何指定
instanceof
操作符工作的。

Foo[]
Foo
对象的数组。
Foo
对象的数组不是
Foo
Bar
Face
对象,因此如果使用
instanceof
检查,结果将是
false
。数组是Java中的对象,因此
Foo[]instanceof Object
true


Foo[1]
引用数组中索引1处的
Foo
对象。该对象的类型是
Foo
,因此如果您使用
instanceof
检查,则对于
Foo
Bar
Face
object
,我们不知道这些诊断行显示的是什么。请提供一个简短但完整的例子。“Foo[]Foo,Bar,Face is false”是什么意思?新的编辑并不能让它更容易理解。你为什么不给我们看看你用来比较所有东西的实际代码呢?
Foo[]
(数组
Foo
)当然不是
Foo
Bar
Face
,所以
instanceof
返回
false
@Jesper:你可能在这里有所成就+1表示你的占卜/解码能力
Foo[1]
是数组的第二个元素(索引从0开始)。@Jesper-nit picker:-)
null                   Any class or interface type        false
Foo instance                 Foo, Bar, Face, Object       true
Bar instance                 Bar, Face, Object            true
Bar instance                     Foo                      false
Foo [ ]                      Foo, Bar, Face               false
Foo [ ]                         Object                    true
Foo [ 1 ]                    Foo, Bar, Face, Object       true
(Reference)               (Type)                          (Result)
Foo [ ]                   Foo, Bar, Face                  false
Foo [ ]                   Object                          true
Foo [ 1 ]                 Foo, Bar, Face, Object          true
null                      Any class or interface type     false