物件引數傳遞中 棧和堆的記憶體分析

2021-07-25 15:40:17 字數 982 閱讀 6014

物件記憶體的理解

(1)物件資料存放在堆裡面,

(2)基本型別的變數和物件的引用變數都在函式的棧記憶體中分配。

特別的 :

1.陣列是物件。

2.string型別是特殊型別

下面有個例子:

string str = new string("good");

string str2 ="123";

main ex = new main

ex.change(ex.str,ex.str2);

system.out.print(ex.str);

system.out.println(ex.str2);

public void change(string str3,string str4)

結果:good123

分析輸出過程:

str 是乙個物件的引用。

good

存放在棧,當調

change

是引用傳遞,實際上

str賦值給了成員變數

str3,

於是引用

str3

指向物件,當

str3 = "test ok";

時候,實際上新生成了乙個

string

物件,str3

指向新的物件,由於原來的物件還是持有強引用

str,所以不會**,列印出來的仍然是

good。

第二個123字串存放在棧區,

123傳入

change

實際上是值傳遞,

str4

剛開始指向棧區的

123,當

str4= "456";

就會在棧區另外開闢乙個位址存放

456,

str4

指向該位址,所以輸出的還是

123

記憶體中堆和棧

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構的棧。由高位址向低位址分配。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由...

記憶體中的堆和棧

棧 棧是向低位址擴充套件的資料結構,是一塊連續的記憶體的區域。這句話的意思是棧頂的位址和棧的最大容量是系統預先規定好的,在windows下,棧的大小是2m 也有的說是1m,總之是乙個編譯時就確定的常數 如果申請的空間超過棧的剩餘空間時,將 提示overflow。因此,能從棧獲得的空間較小。堆和棧的對...

記憶體中的堆和棧

堆區,棧區,全域性區,文字常量區,程式 區 棧是你的電腦記憶體的乙個特別區域,它用來儲存被每乙個function 包括mian 方法 建立的臨時變數。棧是filo,就是先進後出原則的結構體,它密切的被cpu管理和充分利用。每次function宣告乙個新的變數,它就會被 推 到棧中。然後每次乙個fun...