2016-07-12 9 views
0

Javaの演奏方法を見ていますが、何らかのキャスティングについて疑問があります。次のコードを考えてみましょう:Javaのキャストオブジェクト/文字列配列

String[][] s = null; 
Object[] o = null; 

o = (Object[][]) s; // compile-time correct 

、次の例を考えてみます。

Object[][] o = null; 
String[] s = null; 

s = (String[]) o; // compile-time error: Cannot cast from Object[] to String[] 

それはなぜ起こるのでしょうか?よくわかりません。これはあなたのコンパイルエラーを与えていないこと

+5

になります。 'Object [] []'から 'String []'にキャストしようとしています –

+3

最初の例は 'Object'が' Object'(すべてが 'Object')なので動作します。 – Gendarme

+1

異なる次元の配列をキャストする理由を説明してください。これは明らかにあまり意味がありません。 – martinhh

答えて

1

決定的に(すなわち、常に、かつ常に)間違っているため、失敗しています。

oには必ずオブジェクトの配列が含まれています。これらは決してストリングではありません。

最初のサンプルでは、​​文字列配列をオブジェクトとして入力できます。

"配列ネスト"を削除すると、これを説明することができます。 考えてみましょう:

String[] myStringArray = null; //instantiation not important 
Object someObj = myStringArray; //no problem since arrays are Objects 

あなたは第二の例ではやっている何をあなたは[] `` String []型 ``へのオブジェクトからキャストしていない

Object[] myObjectArray = null; //instantiation not important 
String someString = myObjectArray; //compile time error, since an Object[] is never a String 
2

お知らせ:String[]

Object[] o = null; 
String[] s = null; 

s = (String[]) o; 

Object[][]が互換性のないタイプのエラーが発生します。
Object[]String[]は正常に動作します。