为什么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
答案 0 :(得分:4)
Foo[]
是Foo
个对象的数组。 Foo
个对象数组不是Foo
,Bar
或Face
对象,因此如果您使用instanceof
进行检查,结果将是{{1 }}。数组是Java中的对象,因此false
为Foo[] instanceof Object
。
true
引用数组中索引1处的Foo[1]
对象。该对象的类型为Foo
,因此如果您使用Foo
进行检查,instanceof
,true
,Foo
的结果为Bar
和Face
。
答案 1 :(得分:2)
(Reference) (Type) (Result) Foo [ ] Foo, Bar, Face false
Foo[]
表示“Foo数组”,而Foo[]
不是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
运算符的工作方式。