2012-10-17 232 views
-3

爲什麼Foo[]false?這是Bar的一個實例。即使Face有效期爲同一類的Bar class工具it.Two對象也有instanceof.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 
+6

我們不知道這些診斷線顯示什麼。請提供一個簡短但完整的例子。 –

+0

「Foo [] Foo,Bar,Face is false」是什麼意思? –

+0

新的編輯並沒有讓它更容易理解。你爲什麼不告訴我們你用來比較一切的實際代碼。 – Austin

回答

4

Foo[]數組Foo對象。 Foo對象的數組不是Foo,BarFace對象,因此如果使用instanceof檢查結果,結果將爲false。數組 Java中的對象,所以Foo[] instanceof Objecttrue

Foo[1]指陣列中索引爲1的Foo對象。該對象的類型爲Foo,因此如果使用instanceof檢查結果,則結果爲trueFoo,Bar,FaceObject)。

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

Foo[]手段 「富數組」,並且Foo[]FooBarFace的亞型。

Foo [ ]     Object       true 

然而,Foo[]Object一個亞型,因爲所有的參考是Object亞型和數組類型是引用類型。

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

Foo[1]裝置(I假定)一個Foo[]實例的第二元件。 Foo陣列的元素的名義類型是Foo。並且Foo所有這些類型的子類型。

null      Any class or interface type  false 

null值不是在技術意義上的任何引用類型的實例。 (當您將null分配給參考變量時,null的文字是轉換爲爲參考變量的類型...)這種情況有點意外(對於新的Java程序員),但它是如何運行的instanceof指定工作。

+0

'Foo [1]'是數組的* second *元素(索引從0開始) – Jesper

+0

@Jesper - nit-picker :-) –