關於成員變數和區域性變數儲存位置

2021-10-23 05:37:08 字數 603 閱讀 6521

成員變數在堆記憶體裡,區域性變數在棧記憶體裡。(基礎型別)

我有疑惑:

既然成員變數存在於物件中,物件存在於堆中,所以成員變數存在於堆中。那麼按照這樣的推理,區域性變數存在於方法中,而方法存在於物件中,物件存在於堆中,那是不是可以說區域性變數存在於堆中?

解決思想

當物件new出來,實體存在於堆,物件的成員變數已經在堆上分配空間,但物件裡面的方法是沒有出現的,只出現方法的宣告,方法裡面的區域性變數並沒有建立。等到物件呼叫此方法時,為了加快執行的速度,方法中的區域性變數才會在棧中建立,所以,方法中的區域性變數是在棧內的。

當然需要注意的是類變數(靜態變數)存在於方法區!!引用型別的區域性變數宣告在棧,儲存在堆

記憶體:棧 1.存放區域性變數 2.不可以被多個執行緒共享 3.空間連續,速度快

堆 1.存放物件 2.可以被多個執行緒共享 3.空間不連續,速度慢,但是靈活

方法區 1.存放類的資訊:**、靜態變數、字串常量等等 2.可以被多個執行緒共享 3.空間不連續,速度慢,但是靈活

總的來說:我們先來記住兩條**法則:

1.引用型別總是被分配到「堆」上。不論是成員變數還是區域性

2.基礎型別總是分配到它宣告的地方:成員變數在堆記憶體裡,區域性變數在棧記憶體裡。

成員變數和區域性變數

定義類其實就是在定義類中的成員 成員 成員變數 屬性,成員函式 行為 成員變數和區域性變數的區別 1.成員變數定義在類中,整個類中都可以訪問 區域性變數定義在函式 語句 區域性 塊中,只在所屬的區域有效 2.成員變數存在於堆記憶體的物件中。區域性變數存在於棧記憶體的方法中。3.存活時間不同 成員變數...

成員變數和區域性變數

成員變數 寫在 interence和 end之間大括號之間的變數 例項變數,屬性 注意 1.成員變數只能通過物件來訪問 2.成員變數不能離開類,離開類之後就不是成員變數 3.成員變數不能在定義的同時初始化 儲存 當前物件對應的堆得儲存空間中 堆區 特點 堆區儲存的資料不會自動釋放,只能手動釋放 區域...

成員變數和區域性變數

成員變數 區域性變數 在類內部定義的變數 在方法內部定義的變數 有訪問許可權修飾符 沒有訪問許可權修飾符 有靜態成員變數 沒有靜態區域性變數 系統可以自動為成員變數賦初值 系統不會為區域性變數賦初值 只要類在某個作用域中,其字段也 也稱成員變數 也在該作用域內 區域性變數存在於表示宣告該變數的塊語句...