1. 程式人生 > >關於java的一個簡單二維陣列foreach遍歷問題

關於java的一個簡單二維陣列foreach遍歷問題

問題:foreach遍歷一個二維陣列,到底是如何遍歷的呢?

這與陣列在棧堆中的記憶體位置有關係,貼圖:

首先int[][] arr 壓棧,然後在堆記憶體中分配一個二維陣列的地址,引用給arr宣告,注意,這裡的地址其實是一個一維陣列,一維陣列中存放的都是地址值,然後遍歷arr[],再次分配幾個一維陣列堆記憶體,將它們在堆中的地址值儲存在arr[]中,這樣一個二維陣列就完成了,注意,新分配的這幾個一維陣列記憶體儲的就都是正兒八經的資料。

遍歷時,首先遍歷arr[],得到的都是一些地址值,然後再次遍歷arr[][],這才能得到所儲存的值

(心得:其實二位陣列的本質還是一維陣列,只不過特殊一些,是由一個一維陣列衍生出去,將它們的地址值儲存起來方便呼叫!!!)

程式碼塊:public class TextMain {

public static void main(String[] args) {
// 定義一個二維陣列
int[][] arr = new int[][] {{4,3},{5,7}};
System.out.println("陣列中的元素是");
// 定義一個外層迴圈計數器
int i = 0;
for(int s[]:arr) {
i++;
// 定義一個內層迴圈計數器
int j = 0;
System.out.println("s[]中儲存的值" + s[0]);
for(int e:s) {
j++;
if(i == arr.length && j == s.length) {
System.out.println(e);
}else {
System.out.println(e + ",");
}
// 記錄內層迴圈的次數
System.out.println("內層迴圈" + j + "次" );
}
// 記錄外層迴圈的次數
System.out.println("外層迴圈" + i + "次" );
System.out.println("");
}
}

}

結果: