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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gulup 中级黑马   /  2013-8-25 20:34  /  2055 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 gulup 于 2013-8-28 00:17 编辑

刚刚在j8看到有人问这个问题,我也拿来这里问一下。
int [][] num = {1,2,3};
int [][] num = new int[][]{1,2,3};
这两个有区别吗?我回答是没区别,因为数组是引用数据类型的。实际内容都是在堆内存分配的,上面两个最后都传递引用给了num,指向了堆内存的空间,这有区别吗?没有吧?
如果有区别。求指出区别。谢谢。

评分

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

查看全部评分

8 个回复

正序浏览
楼主,如果问题解决了,请把问题的"未解决"更改为"已解决"!
谢谢合作!

更改方法:http://bbs.itheima.com/thread-71308-1-1.html
回复 使用道具 举报
静态初始化和动态初始化开始都指定了数组大小,java也在栈空间分配了相应的大小,只是静态初始化开始就指定了值,而动态初始化是在后面指定数组的值,刚开始数组的值都是默认值
用javap反编译一下生成的class文件就发现是完全一样的

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
这两种创建数组的方法除了一个比另一个的简单没有任何存放的的区别,如果你仔细的话可能就会在毕老师的视频中听到。
回复 使用道具 举报
尚前琛 发表于 2013-8-25 21:54
sam9204 发表于 2013-8-25 20:51
int [][] num = {1,2,3};直接放在栈内存
int [][] num = new int[][]{};ne ...

嗯 ,这个可能是我记得有点糊涂了,前者是后者的简化形式没错,照这样推理两者在内存中应该没什么区别。
回复 使用道具 举报
sam9204 发表于 2013-8-25 20:51
int [][] num = {1,2,3};直接放在栈内存
int [][] num = new int[][]{};new出来的是放在堆区的,num在栈内 ...

我不认同这种看法,第一种初始化方式怎么可能放在栈内存中呢?栈内存中存放的是引用数据类型的引用,这个引用的内存真实数据是存放到堆空间的。数组是引用数据类型,怎么可能把真实数据存放到栈内存?我认为第一种只是第二种的一种简化方式。就跟"abc"就是一个匿名的String对象一样。它一样也是在堆内存的,不可能在栈内存。
回复 使用道具 举报
gulup 来自手机 中级黑马 2013-8-25 21:02:37
板凳
sam9204 发表于 2013-8-25 20:51
int [][] num = {1,2,3};直接放在栈内存
int [][] num = new int[][]{};new出来的是放在堆区的,num在栈内 ...

我不认同这种看法,第一种初始化方式怎么可能放在栈内存中呢?栈内存中存放的是引用数据类型的引用,这个引用的内存真实数据是存放到堆空间的。数组是引用数据类型,怎么可能把真实数据存放到栈内存?我认为第一种只是第二种的一种简化方式。就跟"abc"就是一个匿名的String对象一样。它一样也是在堆内存的,不可能在栈内存。
回复 使用道具 举报 1 0
的确没区别,数组里的元素无论怎么定义都是放在堆中,引用放在栈里。两者是一样的。
回复 使用道具 举报
int [][] num = {1,2,3};直接放在栈内存
int [][] num = new int[][]{};new出来的是放在堆区的,num在栈内存的,两者通过引用连接
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马