數組是否必須初始化 對於這個問題,關鍵在於要弄清楚數組變量和數組對象的差別。數組變量是存放在棧內存中的,數組對象是存放在堆內存中的。數組變量只是一個引用變量,他能夠指向實際的數組對象。 所謂的數組初始化並非對數組變量初始化,而是對數組對象進行初始化。 public static void main(String[] args) { int [] num1 = new int[]{11,22,33,44,55}; int [] num2 = num1; int [] num3 = new int[]{1,2,3,4,5}; int [] num4 = null; int [] num5 = {}; num1 = num3; num3[2] = 0; num2[2] = num1[2]; System.out.println(num1[2]); System.out.println(num2[2]); System.out.println(num4[0]);//java.lang.NullPointerException System.out.println(num5[0]);//java.lang.ArrayIndexOutOfBoundsException: 0 } 1.java的數組變量是引用類型的變量 2.大部分時候,我們把數組變量和數組對象搞混了,數組變量只是一個引用變量(類似C里的指針),通常存放在棧內存中(也可放入堆內存中的);而數組對象就是保存在堆內存中的連續內存空間。對數組執行初始化,其實並不是對數組變量執行初始化,而是要對數組對象執行初始化---也就是為該數組對象分派一塊連續的內存空間,這塊連續內存空間的長度就是數組的長度。 對於數組變量來說,它並不需要進行所謂的初始化,只要讓數組變量指向一個有效的數組對象,程序即可正常使用該數組變量了 3. 所有局部變量都是放在棧內存里保存的,不管其是基本類型的變量,還是引用類型的變量,都是存儲在格子的方法棧區中;但引用類型變量所引用的對象(包括數組,普通java對象)則總是存儲在堆內存中。