A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘学宾 中级黑马   /  2012-10-27 10:48  /  1948 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,我们都知道,堆区存储的全部是对象和数组。而栈区存储的是基础数据类型的对象和对象的引用。,
2,我们又知道,二维数组的对象存在堆区,如创建二维数组 int[][] arr = new int[3][] ; 然后我们对这个
      数组中的3个一维数组进行初始化,如arr[0] = new int[3];arr[1] = new int[1];arr[2] = new int[2];  这样
      便在堆区新开辟了三个一位数组的空间,而arr[0]、arr[1]和arr[3]是这三个一位数组的引用。
我的问题是这三个引用(即arr[0]、arr[1]和arr[3])是存储在堆区中的,而不是存储在栈区中的。
这样岂不违背了第1句话?(上述文字也许是我存在误解,请大牛们解释一下)



上个图,这是毕老师讲数组视频的一个关于二维数组存储空间的截图。

上个图,这是毕老师讲数组视频的一个关于二维数组存储空间的截图。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
java中没有像其他语言一样,有多维数组的类型,是因为java的多维数组都是看作数组的数组,比如说二维数组看作是一维数组的数组,即在一维数组中放数组。其他的同理。
一般只要在定义时候规定了第一个数组的维数就可以了,比如int [][] a = new int [2][];后面的不指定维数,java虚拟机就能运行成功。
int [][] a= new int [2][];可以写成 int[] a[] = new int [2][];也就是在a[]数组中放int[]数组。
此时在内存中就会先分配两块内存空间,而不会去管每一块里面如何再去分配,那是每一块内存自己的事。所以不是连续分配成连续的4个int空间,而是先创建2个int[]空间。然后每一个int[]空间再分别分配。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马