黑马程序员技术交流社区

标题: 数组的定义 [打印本页]

作者: 黄敏文    时间: 2011-9-1 16:14
标题: 数组的定义
int[] array1 = new int[]{1, 2, 3};
  int[] array2 = {1, 2, 3};


这两种数组的定义是否是一样的,还是说有存在性能或者其他方面的区别,以及他们在内存中的情况是否跟初始化String数组是相似的
作者: 匿名    时间: 2011-9-1 16:28
我没见过第一种格试啊 我也不懂
array2是静态声名数组 直接在堆中给定内存空间
作者: 匿名    时间: 2011-9-1 17:22
应该就是两种不同的写法吧。java的祖宗怎么会把数组定义搞的这么复杂呢?张孝祥老师在视频中倒是提到过这两种不同的写法,没有多讲。楼主为什么有此想法,看到什么了?
作者: 匿名    时间: 2011-9-1 17:38
标题: 回复 藤椅 的帖子
只是在写程序的时候偶然想起来的:)
作者: 匿名    时间: 2011-9-1 21:02
见老鸟们都写得是第一种,
我感觉:编译器应该会等同对待把
作者: 匿名    时间: 2011-9-1 22:41
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 22:46
标题: 回复 地板 的帖子
我觉得
int[] array1 = new int[]{1, 2, 3};
是在堆内存中创建空间存放123 ,然后array1引用他
而int[] array2 = {1, 2, 3};
是在栈内存中创建3个int
作者: 匿名    时间: 2011-9-4 11:05
我认为,
int[] array1 = new int[]{1, 2, 3};
是用利用对象的形式
int[] array2 = {1, 2, 3};
这个就是普通的引用类型
作者: 匿名    时间: 2011-9-4 11:40
我觉得应该是这样,不知道对不对,第二种应该是共享设计模式,意思就是说,我在声明array2的时候开辟了一个堆空间,这个空间里面是{1,2,3},然后我下次如果需要再声明一个数组,内控和这个一样的时候,就不会再开辟新的空间,而是会直接引用这个堆空间,而带有new的声明是无论如何都会开辟新空间的,至于具体怎么用,我觉得看个人爱好了,其实虽然第一种方法有时候是会产生一些没用的空间,但是也不会多影响程序质量,第二种方法产生的空间可能也会被GC处理,这些更深层的东西我就不大理解了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2