黑马程序员技术交流社区
标题:
问一个在内存中开辟空间的问题。
[打印本页]
作者:
于海生
时间:
2011-12-22 22:39
标题:
问一个在内存中开辟空间的问题。
本帖最后由 于海生 于 2011-12-23 11:43 编辑
int [] arr = new int [] {3,5,1,7};
这种形式在堆内存中开辟了一个数组空间。
int [] arr = {3,5,1,7};
这种形式没有new关键字,是在堆内存中开辟空间,还是在栈内存中开辟空间呢?
作者:
yunqiangshan
时间:
2011-12-22 23:01
也是在堆内存中,两种形式是等价的,栈内存中存的是地址值。
作者:
于汝国
时间:
2011-12-22 23:17
数组和对象,通过new建立的实例都存放在堆内存中;每一个实体都有内存地址值;
所以应该也是在堆内存中开辟空间。
详细内容如下:
格式: 元素类型[] 数组名=new 元素类型[]{元素,元素……};
示例: Int[] arr=new int []{3,5,1,7};
Int[] arr={3,5,1,7};
数组属于引用数据类型
内存结构:
Java程序在运行时,需要在内存中的分配空间。为了提高运行效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的数据处理方式和内存管理方式
栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不再被使用,会在不确定的时间内被垃圾回收器回收
除了栈内存和堆内存,内存区还有方法区、本地方法区、寄存器
作者:
郝锡强
时间:
2011-12-23 00:30
两种形式等价,堆存数据,栈存指针
作者:
zclove898
时间:
2011-12-23 00:33
int [] arr = new int [] {3,5,1,7};与int [] arr = {3,5,1,7};其实只是写法不同而已。第二中是属于静态初始化方式。只要是引用数据类型,“=”后的语句都是在堆内存中开辟空间。
作者:
陈帅雷
时间:
2011-12-23 09:51
java的堆是一个运行时的数据区,用来存储数据的单元,存放通过new关键字新建的对象和数组,对象从中分配内存。
在堆中声明的对象,是不能直接访问的,必须通过在栈中声明的指向该引用的变量来调用。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
两种都是在堆里面存,栈里面有引用指向堆里面对应的对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2