关于java中数组的问题
int a[][] =new int[][]{{1,2,3},{4,5,6,7},{7,8,9,10,11}};
请问大侠 上面定义的数组 在java中如何存储的?
我现在纠结的地方是:该数组是a[3][x],可数组中的第二维的长度是不固定的,所以我想请问java中如何存储这样的数组?
------解决方案--------------------int i=10;
这是基本类型的变量.
int i[]={10};
这是基本类型的数组,每个元素是基本类型
String str="aaa";
这是引用变量
String str[]={"aaa"};
这是引用类型的数组,每个元素是一个引用类.
数组也是一个引用类型
想一下,一个一维数组是一个引用类型,那么如果定义数组的数组呢?道理是不是一样的?
对于上的String的类型,变成了int[];
也就是int []a={1};--->对应于String str="aa";
对应的数组是:
int [](类型) ={类型,类型};
基中(类型)是[]也就是:
int [] []aa={{1},{2}};
aa[]是一个数组,每一个元素是int[]
int bb[]={2};
bb是一个数组,每一个元素是int
------解决方案--------------------先存一维数组 然后分别存储
------解决方案--------------------基本类型存值,类类型存引用
多维数组内部实际上还是一维数组
------解决方案--------------------2维数组,可以看作是1维数组的1维数组
int a[][] =new int[][]{{1,2,3},{4,5,6,7},{7,8,9,10,11}};
a[0] = {1,2,3} //a[0]有3个元素
a[1] = {4,5,6,7} //a[1]有4个元素
a[2] = {7,8,9,10,11} //a[2]有5个元素
java中的数组是一个对象,所以2维数组的1维跟1维之间的内存不一定是连续的
即a[0]和a[1]内存上不一定是连续的,而最后1维的内存可能是连续的,即a[0][0]和a[0][1]可能是连续的
int a[][] =new int[][]{{1,2,3},{4,5,6,7},{7,8,9,10,11}};
可以相当于如下的过程
首先第一步
int a[][] = new int[3][]; //给a分配空间,为3个数组对象空间
第二步
a[0] = new int[3]; //给a的第1个数组对象分配空间,为3个int
第三步
a[0][0] = 1; //给a[0][0]元素赋值
a[0][1] = 2; //给a[0][1]元素赋值
a[0][2] = 3; //给a[0][2]元素赋值
然后重复第二步,给a的第2个数组对象分配空间
a[1] = new int[4];
然后重复第三步,给a的第二个数组的元素赋值
依次类推
------解决方案--------------------定义二维数组,里面的维数不确定而已。