當僅定義一個數組變量(int[] numbers)時,該變量還未指向任何有效的記憶體,是以不能指定數組的長度,隻有對數組進行初始化(為數組元素配置設定記憶體空間)後才可以使用。
數組初始化分為靜态初始化(在定義時就指定數組元素的值,此時不能指定數組長度)和動态初始化(隻指定數組長度,由系統配置設定初始值)。
1
2
3
4
5
6
建議不要混用靜态初始化和動态初始化,即不要既指定數組的長度的同時又指定每個元素的值。
當初始化完畢後,就可以按索引位置(0~array.length-1)來通路數組元素了。
當使用動态初始化時,如在對應的索引位未指定值的話,系統将指定相應資料類型對應的預設值(整數為0,浮點數為0.0,字元為’\u0000’,布爾類型為false,引用類型(包括string)為null)。
7
8
9
10
11
12
13
14
15
16
結果如下:
miracle miracle he null
miracle miracle he null
首先給出數組(數組引用和數組元素)在記憶體中的存放形式,如圖:

數組引用變量是存放在棧記憶體(stack)中,數組元素本質是一個對象,是存放在堆記憶體(heap)中。通過棧記憶體中的指針指向對應元素的在堆記憶體中的位置來實作通路。
了解堆和棧看這裡:[java堆和棧有什麼差別][3]
[3]:
當數組在初始化時,就會在堆中配置設定對應的空間,這個大小是不會因為内部元素的變化而變化,也就是說,如果數組中某個元素被清空,數組占用的記憶體空間也不會縮小。
原文位址:http://blog.csdn.net/ooppookid/article/details/51404440