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