一.什么是二维数组
简单理解就是数组中存数组
二.二维数组的初始化
1.静态初始化
格式: 数据类型 [ ][ ] 数组名 = new 数据类型[ ] [ ] {{元素1,元素2},{元素1,元素2}};
简化格式 : 数据类型 [ ][ ] 数组名 = {{元素1,元素2},{元素1,元素2}};(推荐使用)
例如: int [][]arr = {{1,2,3},{4,5,6}};
可以理解为 一维数组是二维数组的元素!
例如
package text;
public class Text1 {
public static void main(String[] args) {
int [][]arr = {{1,2,3},{4,5,6}};
System.out.println(arr[0]);
}
}
、
我们可以看到打印出来的是一个地址值,这个地址值就是存储在二维数组中的第一个 一维数组
for (int i = 0; i < arr[0].length; i++) {
System.out.println(arr[0][i]);
}
我们在执行上诉代码
就可以得到第一个数组中的元素
所以对二维数组的遍历就可以写成
package text;
public class Text1 {
public static void main(String[] args) {
/*
对二维数组的遍历
*/
int [][]arr = {{1,2,3},{4,5,6}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
}
可得结果
2.动态初始化
格式:数据类型[ ][ ] 数组名 = new 数据类型[m][n];
其中 : m表示这个二维数组,可以存放多少个一维数组 ; n表示每一个一维数组,可以存放多少个元素。
我们可以从内存的角度理解二维数组的动态初始化
int [][]arr = new int[2][3];
我们执行上诉语句后,我们其实是
在堆空间内创建了一个数组 ,而且它的元素是 另一个数组的地址
例如:
因为我们没有赋值 ,默认的时候数组元素都为0
而且arr 这个记录的是也是地址值!
让我们从代码角度理解一下
package text;
public class Text1 {
public static void main(String[] args) {
int [][]arr = new int[2][3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
结果为:
动态初始化的特殊写法
数据类型[ ][ ] 数组名 = new 数据类型[m][];
我们可以不指定这个n的值
为什么呢? 在开发中 我们有可能实行不知道我们需要的数组的大小是多少
我们也从代码角度理解一下
package text;
public class Text1 {
public static void main(String[] args) {
int [][]arr = new int[2][];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
结果为:
我想大家应该对二维数组有所理解啦!!