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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄敏文 黑马帝   /  2011-9-1 16:14  /  2130 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int[] array1 = new int[]{1, 2, 3};
  int[] array2 = {1, 2, 3};


这两种数组的定义是否是一样的,还是说有存在性能或者其他方面的区别,以及他们在内存中的情况是否跟初始化String数组是相似的

8 个回复

正序浏览
黑马网友  发表于 2011-9-4 11:40:06
9#
我觉得应该是这样,不知道对不对,第二种应该是共享设计模式,意思就是说,我在声明array2的时候开辟了一个堆空间,这个空间里面是{1,2,3},然后我下次如果需要再声明一个数组,内控和这个一样的时候,就不会再开辟新的空间,而是会直接引用这个堆空间,而带有new的声明是无论如何都会开辟新空间的,至于具体怎么用,我觉得看个人爱好了,其实虽然第一种方法有时候是会产生一些没用的空间,但是也不会多影响程序质量,第二种方法产生的空间可能也会被GC处理,这些更深层的东西我就不大理解了。
回复 使用道具 举报
黑马网友  发表于 2011-9-4 11:05:19
8#
我认为,
int[] array1 = new int[]{1, 2, 3};
是用利用对象的形式
int[] array2 = {1, 2, 3};
这个就是普通的引用类型
回复 使用道具 举报
黑马网友  发表于 2011-9-1 22:46:42
7#

回复 地板 的帖子

我觉得
int[] array1 = new int[]{1, 2, 3};
是在堆内存中创建空间存放123 ,然后array1引用他
而int[] array2 = {1, 2, 3};
是在栈内存中创建3个int
回复 使用道具 举报
黑马网友  发表于 2011-9-1 22:41:13
地板
int[] array1 = new int[]{1, 2, 3};
是新创建了int型数组并将其初始化为1,2,3。然后array1指向新创建的int型数组;
int[] array2 = {1, 2, 3};
是在堆中分配空间给1,2,3。然后array2指向这个空间。
回复 使用道具 举报
黑马网友  发表于 2011-9-1 21:02:03
报纸
见老鸟们都写得是第一种,
我感觉:编译器应该会等同对待把
回复 使用道具 举报
黑马网友  发表于 2011-9-1 17:38:19
板凳

回复 藤椅 的帖子

只是在写程序的时候偶然想起来的:)
回复 使用道具 举报
黑马网友  发表于 2011-9-1 17:22:01
藤椅
应该就是两种不同的写法吧。java的祖宗怎么会把数组定义搞的这么复杂呢?张孝祥老师在视频中倒是提到过这两种不同的写法,没有多讲。楼主为什么有此想法,看到什么了?
回复 使用道具 举报
黑马网友  发表于 2011-9-1 16:28:53
沙发
我没见过第一种格试啊 我也不懂
array2是静态声名数组 直接在堆中给定内存空间
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马