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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ithmC4 中级黑马   /  2014-3-25 13:34  /  6164 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ithmC4 于 2014-3-26 10:09 编辑

int[][] arr = new[3][5];①







以前老认为是第②种,反复看了毕姥爷的视频觉得好像是第一种?

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

8 个回复

倒序浏览
第一种吧  可以把二维数组看成是一个装数组的一维数组
回复 使用道具 举报
自己画得  我觉的是这样子的

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
就是第一种,在内存里的存储是第一种的形式的。
回复 使用道具 举报
赵彦丰 发表于 2014-3-25 14:43
自己画得  我觉的是这样子的

我们理解的区别就是,arr[][?]次级的3个数组在堆中的地址是否需要连续?
我画的是不连续的,你这个画的是连续的。
如果是连续的应该是0x0011,0x0016,0x0021?
回复 使用道具 举报
楼主好,数组的内存在初始化的时候就已经确定下来了且不能改变,它是按照楼主的第二种方式进行存储的,楼主之所以会认为是第一种方式,是因为对于基本类型以外的类型,其在数组中存储的是指向对象的引用,但是这些引用本身仍是按照第二种方式存储的,楼主第一种关系可以对应一维数组中引用和对象在内存中的对应关系
回复 使用道具 举报
刚测试了一下,是按第一种方式存储,可能是java中将多维数组分解成了一维数组的原因,C++中多维数组是按照第二种方式存储的,这是我的测试代码
  1.         public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3. int[][] array={{6,4,12},{3,7,25},{8,5,32}};//int[3][3]数组
  4. int []test=array[0];
  5. System.out.println(test[2]);
  6.         }
复制代码
回复 使用道具 举报
ithmC4 中级黑马 2014-3-26 10:07:54
8#
yanzhendong 发表于 2014-3-25 18:06
刚测试了一下,是按第一种方式存储,可能是java中将多维数组分解成了一维数组的原因,C++中多维数组是按照 ...

原来还可以这么测试,谢谢你啦,我也是学过一点C又不精通才搞得很混乱
回复 使用道具 举报
ithmC4 发表于 2014-3-26 10:07
原来还可以这么测试,谢谢你啦,我也是学过一点C又不精通才搞得很混乱

恩,如果是按第一种方式存储的话,array[0]是不可能返回一个数组的,只有按第一种方式存储(即数组中存储数组)array[0]才能返回一个数组
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马