欢迎来到天天文库
浏览记录
ID:50842456
大小:216.50 KB
页数:7页
时间:2020-03-15
《深入理解JAVA数组.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、为什么我们认为JAVA没有多维数组,因为从数组底层的运行机制上来看。前面的几篇文章里提到过,JAVA语言里的数组类型是引用类型,因此,数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这时会发现很像多维数组。根据数组的语法定义:type[]arrName;,这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,那么可以把上面type具体看成int[](我们知道:int[]就是一种类型,int[]类型的用法与普通类型并
2、无任何区别),那么上面定义数组的语法就是int[][]arrName.扩大类型后:type[][]arrName;JAVA语言采用上面的语法格式来定义二维数组,但它的实质还是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向一维数组。之所以写上面那些概念,就是想先让大家明白一维数组与二维数组之间的区别。下面看代码吧,不想写概念了。publicclassTwoDimensionTest{publicstaticvoidmain(String[]args){//定义一个二维数组int[][]a;//把a当成一维数组进行初始化,初始化a是一个长度为
3、4的数组//a数组的数组元素又是引用类型a=newint[4][];//把a数组当成一维数组,遍历a数组的每个数组元素for(inti=0,len=a.length;i4、]=6;//这时a数组的第一个元素所指数组的第一个元素为系统默认值0/*为了让大家更直接的理解和明白我就忽略下格式吧,把编译结果,放上来,请大家谅解下。*///a数组的第一个元素是一个一维数组,遍历这个一维数组for(inti=0,len=a[0].length;i5、ng[][]str1=newString[][]{newString[3],newString[]{"hello"}};//使用简化的静态初始化语法来初始化二维数组String[][]str2={newString[3],newString[]{"hello"}};System.out.println("使用静态初始化定义的二维数组:"+str1[1][0]);System.out.println("使用简化初始给定义的二维数组:"+str2[1][0]);}}整个程序的编译结果:下面详细说明下,程序代码的运行过程:这段代码(for(inti=0;i6、7、必须是int[]数组,所以接下来的程序对a[0]元素执行初始化,使右边堆内存中第一个数组元素指向一个有效的数组内存,指向一个长度为2的int数组。因为程序采用动态初始化a[0]数组,因此系统将为a[0]的每个数组元素分配默认初始值:0,然后程序再显式为a[0]数组的第二个元素赋值为6,内存图如下:灰色覆盖的数组元素就是程序显式指定的数组元素值。然后接着迭代输出a[0]数组的每个数组元素,将会输出0(这个因为程序员没有显式指定值,所以是系统默认的值)和6。我们知道,初始化多维数组时,可以只指定最左边维的大小;当然,也可以一次指定每一维的大小。//int8、[][]b=newint[3][4];这时定义了一个b数组变量,这个数组变量指向一个长度为3的数组,这个数组
4、]=6;//这时a数组的第一个元素所指数组的第一个元素为系统默认值0/*为了让大家更直接的理解和明白我就忽略下格式吧,把编译结果,放上来,请大家谅解下。*///a数组的第一个元素是一个一维数组,遍历这个一维数组for(inti=0,len=a[0].length;i5、ng[][]str1=newString[][]{newString[3],newString[]{"hello"}};//使用简化的静态初始化语法来初始化二维数组String[][]str2={newString[3],newString[]{"hello"}};System.out.println("使用静态初始化定义的二维数组:"+str1[1][0]);System.out.println("使用简化初始给定义的二维数组:"+str2[1][0]);}}整个程序的编译结果:下面详细说明下,程序代码的运行过程:这段代码(for(inti=0;i6、7、必须是int[]数组,所以接下来的程序对a[0]元素执行初始化,使右边堆内存中第一个数组元素指向一个有效的数组内存,指向一个长度为2的int数组。因为程序采用动态初始化a[0]数组,因此系统将为a[0]的每个数组元素分配默认初始值:0,然后程序再显式为a[0]数组的第二个元素赋值为6,内存图如下:灰色覆盖的数组元素就是程序显式指定的数组元素值。然后接着迭代输出a[0]数组的每个数组元素,将会输出0(这个因为程序员没有显式指定值,所以是系统默认的值)和6。我们知道,初始化多维数组时,可以只指定最左边维的大小;当然,也可以一次指定每一维的大小。//int8、[][]b=newint[3][4];这时定义了一个b数组变量,这个数组变量指向一个长度为3的数组,这个数组
5、ng[][]str1=newString[][]{newString[3],newString[]{"hello"}};//使用简化的静态初始化语法来初始化二维数组String[][]str2={newString[3],newString[]{"hello"}};System.out.println("使用静态初始化定义的二维数组:"+str1[1][0]);System.out.println("使用简化初始给定义的二维数组:"+str2[1][0]);}}整个程序的编译结果:下面详细说明下,程序代码的运行过程:这段代码(for(inti=0;i
6、7、必须是int[]数组,所以接下来的程序对a[0]元素执行初始化,使右边堆内存中第一个数组元素指向一个有效的数组内存,指向一个长度为2的int数组。因为程序采用动态初始化a[0]数组,因此系统将为a[0]的每个数组元素分配默认初始值:0,然后程序再显式为a[0]数组的第二个元素赋值为6,内存图如下:灰色覆盖的数组元素就是程序显式指定的数组元素值。然后接着迭代输出a[0]数组的每个数组元素,将会输出0(这个因为程序员没有显式指定值,所以是系统默认的值)和6。我们知道,初始化多维数组时,可以只指定最左边维的大小;当然,也可以一次指定每一维的大小。//int8、[][]b=newint[3][4];这时定义了一个b数组变量,这个数组变量指向一个长度为3的数组,这个数组
7、必须是int[]数组,所以接下来的程序对a[0]元素执行初始化,使右边堆内存中第一个数组元素指向一个有效的数组内存,指向一个长度为2的int数组。因为程序采用动态初始化a[0]数组,因此系统将为a[0]的每个数组元素分配默认初始值:0,然后程序再显式为a[0]数组的第二个元素赋值为6,内存图如下:灰色覆盖的数组元素就是程序显式指定的数组元素值。然后接着迭代输出a[0]数组的每个数组元素,将会输出0(这个因为程序员没有显式指定值,所以是系统默认的值)和6。我们知道,初始化多维数组时,可以只指定最左边维的大小;当然,也可以一次指定每一维的大小。//int
8、[][]b=newint[3][4];这时定义了一个b数组变量,这个数组变量指向一个长度为3的数组,这个数组
此文档下载收益归作者所有