如何理解成员变量在堆内,局部变量在栈内?


成员变量在堆内存里,局部变量在栈内存里。(基础类型)

我有疑惑:

既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于堆中,那是不是可以说局部变量存在于堆中?

解决思想

当对象new出来,实体存在于堆,对象的成员变量已经在堆上分配空间,但对象里面的方法是没有出现的,只出现方法的声明,方法里面的局部变量并没有创建。等到对象调用此方法时,为了加快运行的速度,方法中的局部变量才会在栈中创建,所以,方法中的局部变量是在栈内的。

当然需要注意的是类变量(静态变量)存在于方法区!!引用类型的局部变量声明在栈,存储在堆

 

内存:栈 1.存放局部变量 2.不可以被多个线程共享 3.空间连续,速度快
堆 1.存放对象 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活 
方法区 1.存放类的信息:代码、静态变量、字符串常量等等 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活

总的来说:我们先来记住两条黄金法则:
1.引用类型总是被分配到“堆”上。不论是成员变量还是局部
2.基础类型总是分配到它声明的地方:成员变量在堆内存里,局部变量在栈内存里。
---------------------
作者:南风待你
来源:CSDN
原文:https://blog.csdn.net/Noreaday/article/details/79711004
版权声明:本文为博主原创文章,转载请附上博文链接!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM