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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java类中成员变量初始化后存放在堆内存中还是栈内存中?

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

11 个回复

倒序浏览
堆内存中
回复 使用道具 举报
栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈。当函数运行结束时,分配给函数的栈空间被收回,在这个函数中被定义的变量也随之被释放和消失。
堆内存:通过new产生的数组和对象分配在堆内存中。
回复 使用道具 举报
栈内存。
存储的都是局部变量。
而且变量所属的作用域一旦结束,该变量就自动释放。


堆内存。
存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。
特点:
1,每一个实体都有首地址值。
2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean false char '\u0000'
3,垃圾回收机制。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
你记住这个  栈内存。 存储的都是局部变量。 而且变量所属的作用域一旦结束,该变量就自动释放。
回复 使用道具 举报
成员变量的名称放在栈内存,值放在堆内存。
回复 使用道具 举报
本帖最后由 张业婷 于 2014-10-16 14:36 编辑
nerveva2000 发表于 2014-10-15 20:06
栈内存。
存储的都是局部变量。
而且变量所属的作用域一旦结束,该变量就自动释放。

那我想问一下
int[] arr=new int[4];
arr[0]=2;
arr[1]=3;
arr[2]=4;
这个数组里面存的是基本数据类型。老师不是说基本数据类型在运算时都放在栈中吗?基本数据类型不是引用变量吧!数组里的基本数据类型算不算成员变量啊?如果算是,基本数据类型也可以在堆中进行运算了!或者说堆中可以存储基本数据类型,但是不能运算?
回复 使用道具 举报 1 1
张业婷 发表于 2014-10-16 14:29
那我想问一下
int[] arr=new int[4];
arr[0]=2;

我也理解不是很深,我是这么理解的
首先,是创建类arr这个数组,然后数组在堆内存中开辟空间,然后会初始化值,这个初始化的值也是在堆内存中 的数组空间里存着。然后arr引用了这个数组的地址。及时给这个数组的元素赋值,也是将值存到数组内。

数组应该属于引用类型吧。不需要再考虑其内部存储数据的类型了吧。




数组这里不应该考虑是不是基本类型数据吧?!这个我不是很清楚。
引用变量 :arr就是个引用变量,它只持有的的是数组的地址。存储在栈中,要手动初始化。
成员变量:成员变量个是类内部,存储在堆,成员变量可以不用初始化,系统自动初始化。

引用变量 或者 成员变量,跟是不是基本数据类型没什么关系吧。没看出来有什么关系。

在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配;
堆内存用来存放由new创建的对象和数组以及对象的实例变量。

回复 使用道具 举报
张业婷 发表于 2014-10-16 14:29
那我想问一下
int[] arr=new int[4];
arr[0]=2;

sorry,一不小心,点了反对。不好意思。不知道怎么改。。。
回复 使用道具 举报
非静态成员变量new之后是在堆内存中,静态的是在方法区内。。。
回复 使用道具 举报
堆栈是个啥东东?
回复 使用道具 举报
nerveva2000 发表于 2014-10-15 20:06
栈内存。
存储的都是局部变量。
而且变量所属的作用域一旦结束,该变量就自动释放。

理解得很透彻,学习啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马