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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 踏雪风暴 中级黑马   /  2014-6-25 12:34  /  1326 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 踏雪风暴 于 2014-6-25 22:38 编辑

想知道为什么成员变量放在堆内存中的,可以的话顺便说说局部变量的

5 个回复

倒序浏览
。。。。。。。{:3_49:}
回复 使用道具 举报
计算机内存在存储数据的时候可以分成三大块
第一块:栈区
第二块:堆区
第三块:共享资源区,方法区。
在第三块中又分了(静态数据区,和非静态数据区)

栈内存区:主要存放的都是基本类型数据,以及对对象的引用,采用后进先出的原理,快速处理内存中的数据,一旦这当中的某一个单元生命周期完结就立刻释放该单元所占用的栈内存。又称弹栈。
堆内存区:主要是用来存放非基本类型即引用类型数据的地方。而引用类型在java中,全是new关键字创建的new关键字后面是调用的该引用类型的构造器,而构造器是用来初始化数据的,这些初始化得数据(就是楼主说的成员变量)被包装在引用类型的构造器中一起创建出来。由于存放引用数据类型的地是在堆内存当中,所以这些成员也一起被创建进了堆内存当中,当然对成员变量值得描述时,是基本类型的值该成员变量还是会指向堆内存当中的某个基本值单元,是引用类型的值 就会指向 堆内存当中的另一块引用类型区域

对于你说的局部变量 其实任何变量他就是一个引用,仅仅是一个引用,这个引用他引用的是基本数据类型 就指向的栈内存区域,引用的是引用类型(即对象)就指向的是堆内存,当然这个局部变量 一般都存储在栈内存或者是方法区中。

以上是我的理解仅供参考,如果有不对,还请各位看到的同学们帮忙纠正。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
且听风语 发表于 2014-6-25 13:21
计算机内存在存储数据的时候可以分成三大块
第一块:栈区
第二块:堆区

有些没明白,跟我理解的不同。。研究下,不过  局部变量引用他引用的是基本数据类型  不全是吧? 数组呢
回复 使用道具 举报
数组是用new创建的吧 new创建的就一个对象啊
不管是 int 【】也好还是 integer【】 也好都是对象

是对象都放在堆里面的
回复 使用道具 举报 1 0
且听风语 发表于 2014-6-25 22:45
数组是用new创建的吧 new创建的就一个对象啊
不管是 int 【】也好还是 integer【】 也好都是对象

我想说的是数组 int[]  arr=new arr[];  中的arr 是放在栈内存中 的,这个就与你说的情况不同,今天有位朋友说成员变量因为对象的存在所以在堆中 分享下,点赞你一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马