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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张晓辉 中级黑马   /  2013-8-21 23:02  /  1237 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张晓辉 于 2013-8-21 23:30 编辑

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

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
堆:存放用new产生的数据
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
你觉得应该存放在哪里呢?
回复 使用道具 举报
meng 发表于 2013-8-21 23:13
堆:存放用new产生的数据
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
...

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

在栈里有地址值
回复 使用道具 举报
对象引用在栈内存中(例中的arr)
对象实例(也就是new后,例中{}部分)放在堆内存中

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

领教了{:soso_e112:}
回复 使用道具 举报

我相信,如果百度一下你可以得到更多,更细致的答案,
编程程序,是不能不理解内存运作的
编程路漫漫,还请加油哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马