誰かがJavaで配列が実際にどのように機能するかを説明してもらえますか?
私は次のコードに驚いた:
Object test = new Object[2][2];
Object test2 = new Object[] {
new Object[2],new Object[2]
};
Object test3 = new Object[2][];
((Object[])test3)[0] = new Object[2];
((Object[])test3)[1] = new Object[2];
System.out.println(test instanceof Object[]);
System.out.println(test instanceof Object[][]);
System.out.println(test2 instanceof Object[]);
System.out.println(test2 instanceof Object[][]);
System.out.println(test3 instanceof Object[]);
System.out.println(test3 instanceof Object[][]);
test2のみがObject[][]のインスタンスではありません
実行時の違いは何ですか?
編集:私はいくつかの答えを見ます。ジョンスキート、私ができることに注意してください:
Object[] test4 = (Object [])test;
test4[0] = "blaaa";
test4[1] = "toto";
System.out.println(test4);
test instanceof Object []はtrueを返し、キャストの実行時に例外は発生しません。Sierra&BatesのSCJPの本によると、IS-A Object [] []だけでなく、Object[]もテストしてください。
しかし、 "test4 [0] =" blaaa ";"を使用して新しい値を再割り当てしようとすると、例外が発生します。スレッド "main"の例外java.lang.ArrayStoreException:Main.main(Main。 java:24)
したがって、実行時に、testとtest2の両方がIS-A Object []であり、両方にオブジェクト配列が含まれているように見えますが、そのうちの1つだけがIS-A Object[][]です。