instanceof运算符

时间:2012-10-17 11:03:59

标签: java

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

操作数和结果使用instanceof Operator。

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

2 个答案:

答案 0 :(得分:4)

Foo[]Foo个对象的数组Foo个对象数组不是FooBarFace对象,因此如果您使用instanceof进行检查,结果将是{{1 }}。数组是Java中的对象,因此falseFoo[] instanceof Object

true引用数组中索引1处的Foo[1]对象。该对象的类型为Foo,因此如果您使用Foo进行检查,instanceoftrueFoo的结果为BarFace

答案 1 :(得分:2)

(Reference)               (Type)                          (Result)
Foo [ ]                   Foo, Bar, Face                  false

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

Foo [ ]                   Object                          true

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

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

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

null                      Any class or interface type     false

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