黑马程序员技术交流社区

标题: 菜鸟提问:是在栈内存中,还是堆内存中? [打印本页]

作者: 耿文达    时间: 2013-1-31 17:29
标题: 菜鸟提问:是在栈内存中,还是堆内存中?
本帖最后由 耿文达 于 2013-2-1 11:02 编辑

毕老师讲课中提到:成员变量在堆内存中,因为对象的存在,才在内存中存在;而局部变量存在于栈内存中,是这样吧?
那我想问一下:成员函数是不是也在堆内存中?那么成员函数中的局部变量在哪里?是堆内存还是栈内存?
举例代码如下:
  1. class Person
  2. {
  3.         int age;//这是一个成员变量
  4.         void shout()
  5.         {
  6.                 int age = 60;//这是函数内部又重新定义的一个局部变量
  7.                 System.out.println("oh,my god!my age is " + age);
  8.         }
  9. }
复制代码
上例中的int  age = 60 存放在哪里呢?请大牛指教,谢谢!
作者: 詹卓锋    时间: 2013-1-31 18:07
成员变量在堆内存中,因为对象的存在,才在内存中存在;而局部变量存在于栈内存中,正确的。只要是变量,都在堆内存中。
成员函数不在堆内存中,而是在java的方法区中,成员函数的局部变量在堆内存中。

6597756961424254876.jpg (100.29 KB, 下载次数: 9)

6597756961424254876.jpg

QQ截图20130131180657.png (18.13 KB, 下载次数: 10)

QQ截图20130131180657.png

作者: 耿文达    时间: 2013-1-31 18:14
詹卓锋 发表于 2013-1-31 18:07
成员变量在堆内存中,因为对象的存在,才在内存中存在;而局部变量存在于栈内存中,正确的。只要是变量,都 ...

原来是这样,解答的非常详细,多谢了:handshake
作者: 逍林游    时间: 2013-1-31 18:24
只需要记住:栈内存是由电脑自己来分配管理的,堆内存是需要程序员分配管理的。
比如用new关键字新建对象,Java自带内存垃圾清理功能,所以程序员一般可以不用管,c++中清理内存还需要用delete!
作者: 铿锵科技    时间: 2013-2-1 01:26
不管堆内存还是栈内存,只要清析的知道要引用的是那个变量,如果不是很懂变量的名称请不要重叠




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