int a[][] =new int[][]{{1,2,3},{4,5,6,7},{7,8,9,10,11}};
请问大侠 上面定义的数组 在java中如何存储的?我现在纠结的地方是:该数组是a[3][x],可数组中的第二维的长度是不固定的,所以我想请问java中如何存储这样的数组?

解决方案 »

  1.   

    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.   

    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的第二个数组的元素赋值
    依次类推