在java中,聲明一個(gè)數(shù)組過(guò)程中,是如何分配內(nèi)存的? 1. 當(dāng)聲明數(shù)組類型變量時(shí),為其分配了(32位)引用空間,由于未賦值,因此并不指向任何對(duì)象; 2. 當(dāng)創(chuàng)建了一個(gè)數(shù)組對(duì)象(也就是new出來(lái)的)并將其地址賦值給了變量,其中創(chuàng)建出來(lái)的那幾個(gè)數(shù)組元素相當(dāng)于引用類型變量,因此各自占用(32位的)引用空間并按其默 認(rèn)初始化規(guī)則被賦值為null 3. 程序繼續(xù)運(yùn)行,當(dāng)創(chuàng)建新的對(duì)象并(將其地址)賦值給各數(shù)組元素,此時(shí)堆內(nèi)存就會(huì)有值了 Java變量一定要初始化嗎? 不一定。Java數(shù)組變量是引用數(shù)據(jù)類型變量,它并不是數(shù)組對(duì)象本身,只要讓數(shù)組變量指向有效的數(shù)組對(duì)象,即可使用該數(shù)組變量。對(duì)數(shù)組執(zhí)行初始化,并不是對(duì)數(shù)組變量進(jìn)行初始化,而是對(duì)數(shù)組對(duì)象進(jìn)行初始化——也就是為該數(shù)組對(duì)象分配一塊連續(xù)的內(nèi)存空間,這塊連續(xù)的內(nèi)存空間就是數(shù)組的長(zhǎng)度。 基本類型變量都放在棧內(nèi)存中? 錯(cuò)。應(yīng)該這樣說(shuō):所有局部變量都放在棧內(nèi)存里保存的,不管其是基本類型的變量,還是引用類型變量,都是存儲(chǔ)在各自的方法棧區(qū)中;但是引用類型變量所引用的對(duì)象(包括數(shù)組、普通java對(duì)象)則總是存儲(chǔ)在堆內(nèi)存中。 引用變量何時(shí)只是棧內(nèi)存中的變量本身,何時(shí)又變?yōu)橐脤?shí)例的java對(duì)象? 引用變量本質(zhì)上只是一個(gè)指針,只要程序通過(guò)引用變量訪問(wèn)屬性,或者通過(guò)引用變量來(lái)調(diào)用方法,該引用變量將會(huì)由他所引用的對(duì)象代替。 |
|
來(lái)自: 啊哈s1md2immc9 > 《文件夾1》