初學 Java 多維陣列時,常對 a[0]、a[0][0] 的維度感到困惑。關鍵在於「陣列的陣列」觀念:Java 沒有真正的多維陣列,只有「一維陣列,其元素又是一維陣列」。
int[][][] a = new int[2][3][4];
// 邏輯結構:長度 2 的一維陣列
// 每個元素指向一個長度 3 的二維陣列
// 每個元素再指向一個長度 4 的一維陣列(底層資料)
| 運算式 | 型別 | 維度 | 說明 |
|---|---|---|---|
a | int[][][] | 三維 | 最外層陣列參考 |
a[0] | int[][] | 二維 | 取出第一個「二維陣列」參考 |
a[0][0] | int[] | 一維 | 再取出第一個「一維陣列」參考 |
a[0][0][0] | int | 純量 | 最終取出單一 int 值 |
a ──► [ ref0 ] ──► [ ref00 ] ──► [ 0, 0, 0, 0 ] (int[4])
[ ref1 ] [ ref01 ] ──► [ 0, 0, 0, 0 ]
[ ref02 ] ──► [ 0, 0, 0, 0 ]
a[0] 拿到的是 ref0 指向的整個二維陣列(含 3 個一維陣列)。a[0][0] 拿到的是 ref00 指向的單一一維陣列(含 4 個 int)。「每加一個
[索引],維度就減一。」
[0] 後變 N-1 維。a[0]:3→2 維(二維)。a[0][0]:3→1 維(一維)。a[0].length 是 4 → 錯,它是 3(二維陣列的第一維長度)。a[0][0].length 是 3 → 錯,它是 4(底層一維陣列長度)。理解「陣列的陣列」本質,維度遞減就不再是謎,寫多維陣列迴圈時也能精準控制 .length 邊界。