本節(jié)主要內(nèi)容:
1:一維數(shù)組在動(dòng)態(tài)賦值在內(nèi)存中圖解。
2:本節(jié)總結(jié)&下節(jié)預(yù)告
本文出處:《凱哥陪你學(xué)系列之java基礎(chǔ)篇.Java基本語法篇》中第24篇 數(shù)組3 一維數(shù)組在內(nèi)存中圖解

如上面的代碼我們先讀代碼:
第13行 在主函數(shù)(main()) 中創(chuàng)建了一個(gè)int 類型的一維數(shù)組長度等于3
在對(duì)應(yīng)堆、棧中。
1:聲明數(shù)組&由系統(tǒng)初始化默認(rèn)值

流程說明:
1.1:系統(tǒng)先執(zhí)行main方法。所以main方法被壓棧到最下面
而int [] arr 又是main方法的局部變量。所以也在棧中(見上圖棧區(qū))
1.2:在堆區(qū)系統(tǒng)先創(chuàng)建三個(gè)連續(xù)的區(qū)域。對(duì)應(yīng)的內(nèi)存地址為:[I@39ff48d8
然后給每個(gè)對(duì)應(yīng)所以都賦默認(rèn)值0(見上圖堆區(qū))
1.3:系統(tǒng)將1.2中堆區(qū)創(chuàng)建的連續(xù)空間的地址值給arr
1.4:所以在第14行,我們輸出arr在內(nèi)存中的地址就是[I@39ff48d8
2:動(dòng)態(tài)給數(shù)組arr賦值
第16.17.18行操作如下:

流程說明:
2.1: 在動(dòng)態(tài)賦值的時(shí)候,系統(tǒng)先根據(jù)arr對(duì)應(yīng)堆區(qū)的地址值找到對(duì)應(yīng)連續(xù)空間
2.2:然后根據(jù)對(duì)應(yīng)索引替換相應(yīng)的值
3:輸出新賦值的數(shù)據(jù):
所以在19、20行輸出的實(shí)際值就是
在堆區(qū)地址值為[I@39ff48d8的連續(xù)區(qū)域中,下標(biāo)索引為1和2的值。
從上圖中我們可以看到對(duì)應(yīng)的值就是15 和30
所以打印到控制臺(tái)上的值就是 15 和30
完整圖:

思考:


以上這些為什么輸入的結(jié)果如下圖:

圖解如下:


本節(jié)總結(jié):
通過本節(jié)學(xué)習(xí),需要理解:
1:一維數(shù)組動(dòng)態(tài)賦值,在內(nèi)存中是怎么處理的
下節(jié)預(yù)告:
通過本節(jié)學(xué)習(xí)我們知道了動(dòng)態(tài)給數(shù)組賦值,既然有動(dòng)態(tài)賦值,那么是不是也有靜態(tài)賦值呢?靜態(tài)賦值又是什么樣子呢?請(qǐng)學(xué)習(xí)下一篇:《從零學(xué)java筆錄-第25篇 數(shù)組4 數(shù)組的初始化靜態(tài)初始化及內(nèi)存圖》
歡迎關(guān)注凱哥公眾號(hào):凱哥Java
歡迎訪問凱哥個(gè)人網(wǎng)站:www.kaigejava.com
本文在凱哥個(gè)人網(wǎng)站所在位置:http://www.kaigejava.com/article/detail/94