成員變量在堆內存里,局部變量在棧內存里。(基礎類型)
我有疑惑:
既然成員變量存在於對象中,對象存在於堆中,所以成員變量存在於堆中。那么按照這樣的推理,局部變量存在於方法中,而方法存在於對象中,對象存在於堆中,那是不是可以說局部變量存在於堆中?
解決思想
當對象new出來,實體存在於堆,對象的成員變量已經在堆上分配空間,但對象里面的方法是沒有出現的,只出現方法的聲明,方法里面的局部變量並沒有創建。等到對象調用此方法時,為了加快運行的速度,方法中的局部變量才會在棧中創建,所以,方法中的局部變量是在棧內的。
當然需要注意的是類變量(靜態變量)存在於方法區!!引用類型的局部變量聲明在棧,存儲在堆
內存:棧 1.存放局部變量 2.不可以被多個線程共享 3.空間連續,速度快
堆 1.存放對象 2.可以被多個線程共享 3.空間不連續,速度慢,但是靈活
方法區 1.存放類的信息:代碼、靜態變量、字符串常量等等 2.可以被多個線程共享 3.空間不連續,速度慢,但是靈活
總的來說:我們先來記住兩條黃金法則:
1.引用類型總是被分配到“堆”上。不論是成員變量還是局部
2.基礎類型總是分配到它聲明的地方:成員變量在堆內存里,局部變量在棧內存里。
---------------------
作者:南風待你
來源:CSDN
原文:https://blog.csdn.net/Noreaday/article/details/79711004
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!