標籤:儲存 關鍵字 函數 圖解 .com 代碼 ges 棧記憶體 src
棧記憶體和堆記憶體是記憶體劃分中,始終存在的。兩者相互配合使用。
資料類型的劃分中,將數組分為引用資料類型,就在於局部變數從數組實體中擷取資料的方式得來的。資料類型分為,基礎資料型別 (Elementary Data Type)和引用資料類型。引用資料類型重點在於“引用”,“基本”和“引用”的不同就在於機制的不同。類和函數也被稱作引用資料類型,說明它們也是獨立存在,可以被調用的,具體可見前面的功能化函數調用。
中的代碼不一定放在主函數裡,但是變數一定有自己的所屬函數。
我們來分析一下流程:cpu劃分的五部分記憶體是一直存在的,首先在棧記憶體中,載入進去函數和屬於函數的局部變數。為了明確基本資料賦值和引用資料賦值的不一樣,我們在定義局部變數時,將二者區分開來,一個是int x,另一個是int[] x。一個是int類型,另一個是[]資料類型,但是為了表示出數組實體中存放的是什麼類型的資料,在[]數群組類型的前面加上所儲存資料的類型int。同時,堆記憶體中也要準備好對應的資料,先是根據關鍵字new,在堆記憶體中開闢出一個數群組類型的空間,空間的大小為3,同時給3個小空間給定空間地址(先給定地址,後給定數值)和預設賦值,最後將對應空間地址傳送給局部變數,由局部變數自己來數組中搜尋資料。這一過程,可以理解為局部變數的資料本身是沒有的,引用的都是來自數組的資料。
對於第二個語句int[] y=new int[3]而言,y和x引用的絕不是同一個數組,是重新定義的另一個資料。
接著的x[]=9, y[]=34, 都是對數組中的元素進行賦值和棧中的局部變數沒有任何關係。
最後,書寫了x=y的語句,x和y都是局部變數,它們之間賦值操作是在棧記憶體中操作的,將y的記憶體的空間地址給x,然後x去下面的數組來搜尋對應的位置的資料,上面的資料就變成了垃圾。接著System.out.println(x[0]),輸出的是34,就是由於上面的數組已經變為了垃圾。
只要還有局部變數的指向,那麼數組就不是垃圾。多個引用變數是可以同時指向一個實體的。
JAVA-初步認識-第四章-記憶體配置圖解