Javaの配列についてつまずく方の多くは,「Javaには,配列型しかない(多次元配列のインスタンスを作れない)」ということを理解していない場合が多いように思えます。というのも,Java言語では次のような宣言をするからでしょう。
int[][] a = new int[][]{{1,2,3},{4,5,6}};
このコードを見た多くの方は,あたかも「int[][]」を「二次元配列型」だと勘違いします。この型の正しい解釈は「int型配列の参照値を要素に持つ配列型」です。つまり「配列型」です。ここで大切なのは,この配列型が,要素に配列インスタンスの参照値を持つ点です。これを「配列の配列」と言います。
このことは,次のコードからも証明できます。もし仮にint[][]が,二次元配列型だとしたら,次のコードは「初期値が足りない」という警告かエラーが出るはずです。
int[][] a = new int[][]{{1,2,3},{4,5}};
しかし,実際にはなんの問題にもなりません。なぜなら,このコードは,
(1)三つの要素を持つ配列をインスタンス化して,1と2と3を要素に代入する
(2)二つの要素を持つ配列をインスタンス化して,4と5を要素に代入する
(3)二つの要素を持つ配列をインスタンス化して,(1)と(2)のインスタンスの参照値を要素に代入する
という工程を実行しているだけだからです。