1、二维数组的理解
对于二维数组的理解,我们可以看成是一维数组array1作为另一个一维数组array2的元素而存在。
从数组底层的运行机制来看,其实没有多维数组,本质的底层结构还是一维数组
2、二维数组的使用:
2.1、声明和初始化
//一维数组的动态初始化:
//说明该数组可以存放3个元素
int[] arr1_1=new int[3];
// 二维数组的动态初始化01:
//说明该二维数组存了3个数组,其中每一数组里面存放2个元素
int[][] arr3=new int[3][2];
// 二维数组的动态初始化02
//说明该二维数组存了3个数组,其中每一数组里面存放n个元素,具体待定
int[][] arr4=new int[3][];
2.2、如何调用数组的指定位置的元素
//二维数组的声明和初始化
int[][] arr2=new int[][]{
{
1,2,3},{
2,1,9,2},{
4,32,74}};
//如何调用数组的指定位置的元素?
//输出第二个数组的第三个元素9
System.out.println(arr2[1][2]);//输出9
// 二维数组的动态初始化01:
//说明该二维数组存了3个数组,其中每一数组里面存放2个元素
int[][] arr3=new int[3][2];
//如何调用数组的指定位置的元素?
//输出第一个数组的第一个元素
System.out.println(arr3[0][0]);//输出0
arr3[0][0]=66;//给该位置赋值
System.out.println(arr3[0][0]);//输出66
2.3、如何获取数组的长度
//二维数组的声明和初始化
int[][] arr2=new int[][]{
{
1,2,3},{
2,1,9,2},{
4,32,74}};
//获取数组的长度
System.out.println("数组长度为:"+arr2.length);//数组长度为:3
2.4、如何遍历数组元素
//二维数组的声明和初始化
int[][] arr2=new int[][]{
{
1,2,3},{
2,1,9,2},{
4,32,74}};
//如何遍历数组?
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j]+" ");//1 2 3 2 1 9 2 4 32 74
}
}
2.5、数组元素的默认初始化值
int[][] arr5=new int[3][2];
System.out.println(arr5[0]);//[I@15db9742 是一个堆空间的地址值
//[I@15db9742
//【:一个中括号说明是一维数组 I:说明是int类型 @+地址
System.out.println(arr5[0][0]);//0
String[][] arr6=new String[3][2];
System.out.println(arr6[0]);//[Ljava.lang.String;@6d06d69c
//[Ljava.lang.String;@6d06d69c
//一维数组 String类型 @+堆空间地址
System.out.println(arr6);//[[Ljava.lang.String;@7852e922
//[[Ljava.lang.String;@7852e922
//2个【:说明是二维数组 String类似;+堆空间地址
2.5、总结:
2.6、二维数组的内存解析
1、
放在方法里面的都叫局部变量——放在栈
new 出来的都——放在堆
局部变量arr1先放在栈 在栈空间中声明
后面new的部分会在堆里面声明,首地址值为【0x1234】
栈空间通过这个地址值找到堆空间里面数组的实体结构
从栈再到堆,一开始数组默认数据为null、null、null、null
2、
找到栈空间arr1的第二个数组 通过这个地址值找到堆空间里面的 数组的实体结构
3、
在堆空间生成0x7788的数组,赋值为1,2,3
4、
通过栈空间找到arr1的地址值,找到堆空间的第三个数组 堆空间里面再生成0x6677的数组
0x6677数组的第二个元素赋值为30,5、
最终方法执行完毕之后,意味着它里面的局部变量没有用了
相继的栈空间里面的arr1会出栈
然后对应的指针就没有了
随后对应的【0x1234】被视为垃圾 最终出栈回收
对应的【0x7788】【0x6677】的指针没有了
对应堆空间里面的【0x7788】【0x6677】会被视为垃圾
最终释放堆空间和栈空间
实现垃圾回收
2.6、二维数组练习
public static void main(String[] args) {
int[][] arr = new int[][]{
{
3,5,8},{
12,9},{
7,0,6,4}};
int sum = 0;//记录总和
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++)