java⼆维数组存储⽅式_JAVA-初步认识-第六章-⼆维数组-定义
⽅式内存图解
⼀.
接下讨论数组中特殊的⼀部分。数组是⼀个容器,⽤来存储数据的。现在数组中存储的不再是int,double..的类型了,⽽是存储的数组。
数组中的元素还是数组,我们把它称之为数组中的数组,也就做⼆维数组。维度增加了⼀层。
⼆维数组的基本定义
(这个数组⾥⾯存放的还是数组)→
(最⾥⾯装的是int类型元素)
这就是定义了⼀个⼆维数组,但是数组需要长度,⾥⾯有⼏个⼀维数组。
这个代表着有三个⼩箱⼦,每个⼩箱⼦⾥有两个⼩格⼦。这个书写的形式挺奇怪的。
对⼆维数组的定义的理解:先通过new创建⼀个数组new [],接着数组中装的元素也是数组new [][],数组⾥装的数组⾥⾯的元素是int类型,new int[][],然后每⼀个数组都有固定的长度。⼆维数组要明确数组⾥⾯装了⼏个数组,每个数组⾥有⼏个元素,new int[3][2]。为了操作创建好的数组,给它命名arr=new int[3][2], 名字叫arr的变量是什么类型?元素为int类型的⼆维数组类型 int [][] arr=new int[3] [2]。
java定义一维数组并赋值这⾥还有⼀点要注意的就是格式问题,数组的符号[]可以移动,三种写法都可以,int[][] arr,int[] arr[],int arr[][]。
⼆. ⼆维数组的应⽤
打印⼆维数组是什么样的?
对于⼆维数组⽽⾔,arr[0]代表的是⼆维数组⾥的第⼀个⼀维数组。
现在我们想操作⼆维数组中的第⼀个⼀维数组⾥的0⾓标元素。
连续两个数组符号[],它们分别代表的含义是不同的。第⼀个数组符号[]代表的是第⼏个⼀维数组,第⼆个数组符号⾥⾯的数字代表的是某个⼀维数组中的第⼏位元素。arr[0][0]代表的是⼆维数组中第0位数组中的第0位元素。
这⾥有⼀点,⼆维数组的输出arr[0]打印出来的内容是什么样的?
先介绍⼆维数组在内存中的图解。
⾸先,arr在函数中,属于局部变量,在栈中。右边式⼦中有new新建的数组,因此其在堆中开辟内存
空间。之所以两者分开了存储,就在于它们之间是⼀个引⽤的关系,和直接⽤常量赋值变量int a=4的⽅式不⼀样,堆中的对象是靠的编号的,它把编号给栈中的变量,靠这个编号两者之间搭上关系。
对于⼆维数组的分析是⼀步步来的,以new int[3][2]为例,先明确⼆维数组的长度,⼆维数组的长度为3,上⾯截图中的虚线格⼦代表就是⼀维数组,0,1,2代表的是⼆维数组的长度是3,每⼀个⾥⾯⾓标⾥⾯都是⼀个⼀维数组。
上⾯的截图体现了⼆维数组在内存中分布的意思,但是这么画是错误的。开辟⼀个空间出来,0是由默认初始化的值,那这⾥⾯是什么?它这⾥本⾝就应该存数组,如果没有数组,应该存什么?(),因为数组是实体,当没有实体时 ,引⽤型数据类型的默认值就是null(代表着没有任何指向)。int类型的默认值是0,double默认值是0.0。
任何⼀个实体,在堆内存中产⽣,它⾥⾯的数据都会进⾏默认初始化。这是系统⾃动完成的。接着问题就来了,⼀维数组在哪⼉?
⼀维数组也是个实体,是要是实体,都要在堆内存中开辟空间,所以⼀维数组也要⾃⼰独⽴的开辟⼀个内存空间,同时分配了⼀个地址空间。接着把这个地址空间送⼊对应的位置。
上⾯的右侧截图后,⼆维数组才真正的初始化完毕。紧接着⼆维数组把地址给arr,然后arr就可以指向⼆维数组。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。