Java深入浅出——一维数组和二维数组在内存中的状态图

来源:互联网 发布:尔雅网络课程明史十讲 编辑:程序博客网 时间:2024/05/19 17:25

1.一维数组

1)一维数组的定义
定义一个数组容器,有几个要素。Java是一种强数据类型的语言,必须有数据类型、容器的大小。数组为恒定容器大小,即定长。
在Java中,可以使用以下格式来定义一个数组。如下
数据类型[] 数组名 = new 数据类型[元素个数或数组长度];
int[] x = new int[100];

2)一维数组在内存中状态
接下来,通过两张内存图来详细地说明数组在创建过程中内存的分配情况。
第一行代码 int[] x; 声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。内存中的状态如下图所示。

这里写图片描述
图1-1 内存状态图

第二行代码 x = new int[100]; 创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化,如下图所示。

这里写图片描述
图1-2 内存状态图


2.二维数组

1)二维数组的定义及内存状态图
二维数组的定义有很多方式,接下来针对几种常见的方式进行详细地讲解,具体如下:
第一种方式:

int[][] arr = new int[3][4];

上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示。
这里写图片描述
图2-1 二维数组

第二种方式:

int[][] arr = new int[3][];

第二种方式和第一种类似,只是数组中每个元素的长度不确定,接下来通过一个图来表示这种情况,如下图所示。
这里写图片描述
图2-2 二维数组

第三种方式:

int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9},接下来通过一个图来表示这种情况,如图2-54所示。
这里写图片描述
图2-3 二维数组

2)二维数组总结

int[][] list = new int[n][m]ps:此处为了方便讲解,使用n和m作为值,实际不可使用未定义的n和m。

二维数组先堆内存中创建一个一维数组,一个一维数组里有n个小位置,而这个一维数组里的每个元素又存储着m个不同一维数组的首地址。特别需要注意的是:该m个一维数组也存储在堆内,并非直接存储在第一个一维数组的n个位置中,只是将它们的首地址存了过去。
list存储的也非整个二维数组,而是int[n][m]的首地址的值。即为第一个数组的首地址。
这里写图片描述


原创粉丝点击