黑马程序员技术交流社区

标题: 数组的内存存放方式小知识求解 [打印本页]

作者: 张晓辉    时间: 2013-8-21 23:02
标题: 数组的内存存放方式小知识求解
本帖最后由 张晓辉 于 2013-8-21 23:30 编辑

int [] arr=new int [],内存里是在堆中开辟空间存储。
请问int [] arr={"1","2"}是存储在栈中还是堆里面?

作者: meng    时间: 2013-8-21 23:13
堆:存放用new产生的数据
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
你觉得应该存放在哪里呢?
作者: 张晓辉    时间: 2013-8-21 23:26
meng 发表于 2013-8-21 23:13
堆:存放用new产生的数据
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
...

好吧,是在栈里面{:soso_e100:}
作者: qqhao01    时间: 2013-8-22 02:47
栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
堆内存的特点:1.内存地址值 2.默认初始化值 3.垃圾回收机制

在栈里有地址值
作者: Cway㊣    时间: 2013-8-22 13:43
对象引用在栈内存中(例中的arr)
对象实例(也就是new后,例中{}部分)放在堆内存中

然后再把对象实例的地址赋予对象引用(arr)
作者: EYE_SEE_YOU    时间: 2013-8-22 14:50
楼主要仔细研究毕姥爷的数组内存概述,这两行代码恐怕都有错误哦
首先,java内存分5个区,这里用到2个,栈和堆
int [] arr=new int [];//这句话没有明确int元素的个数,
arr只是一个存储int类型的数组的名称,存在于栈
arr[]数组是一个实例,存在于堆,产生时默认类型初始化值,并将首地址赋给栈中的arr
记住,函数中这边用new关键字产生的实例都在堆中待着,产生的同时做了首地址赋值、元素默认初始化、元素显示初始化
int [] arr={"1","2"}//加了双引号就变成字符串啦,不是int类型元素
1,2就是数组里的元素了,数组是存在于堆中的,里面的元素同样在堆中
作者: 张晓辉    时间: 2013-8-22 18:17
EYE_SEE_YOU 发表于 2013-8-22 14:50
楼主要仔细研究毕姥爷的数组内存概述,这两行代码恐怕都有错误哦
首先,java内存分5个区,这里用到2个,栈 ...

领教了{:soso_e112:}

作者: EYE_SEE_YOU    时间: 2013-8-22 19:05
张晓辉 发表于 2013-8-22 18:17
领教了

我相信,如果百度一下你可以得到更多,更细致的答案,
编程程序,是不能不理解内存运作的
编程路漫漫,还请加油哦





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