物件記憶體的理解
(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...