-3

为什么是Foo[] false?。它是 的一个实例Bar。Even在实现时Face是有效Bar class的。同一个类的两个对象也可以正常工作instanceof.

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

First Operand              instanceof Operand             Result

(正在测试的参考)(我们正在比较参考的类型)

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
4

2 回答 2

4

Foo[]是一个对象数组Foo对象数组Foo不是Foo,BarFace对象,因此如果您使用 进行检查,instanceof结果将是false. 数组Java 中的对象Foo[] instanceof Objecttrue.

Foo[1]引用Foo数组中索引 1 处的对象。该对象的类型是Foo,因此如果您使用 进行检查,instanceof则结果trueFooBar和。FaceObject

于 2012-10-17T11:14:16.397 回答
2
(Reference)               (Type)                          (Result)
Foo [ ]                   Foo, Bar, Face                  false

Foo[]表示“Foo 的数组”,并且 aFoo[]不是Foo,Bar或的子类型Face

Foo [ ]                   Object                          true

但是,Foo[]是 的子类型Object,因为所有引用都是 的子类型,Object而数组类型是引用类型。

Foo [ 1 ]                 Foo, Bar, Face, Object          true

Foo[1]Foo[]表示(我认为)实例的第二个元素。Foo数组元素的名义类型是Foo。并且Foo 所有这些类型的子类型。

null                      Any class or interface type     false

null值不是技术意义上的任何引用类型的实例。(当您分配null给引用变量时,null文字会转换为引用变量的类型......)这种情况有点出乎意料(对于新的 Java 程序员),但它是instanceof指定运算符的工作方式。

于 2012-10-17T11:11:20.730 回答