2016-03-29 121 views
2

我注意到,如果我聲明一個數組爲:我們是否需要在Java中初始化一個數組?

int[] myarr = new int[10]; 

我可以直接使用myarr[1] ++;使得myarr[1] = 1。這是否意味着在Java中,我們不需要需要初始化數組並通過以下方法將每個值設置爲0?

for (int i = 0; i < myarr.length; i++) { 
    myarr[i] = 0; 
} 

我從一些評論中看到數組可能包含垃圾數值。如果數組是一個整型數組,它是否會包含0以外的任何垃圾?

+0

您是否需要*在Java中初始化* anything *? – Raedwald

回答

10

在Java中,所有數組元素都會自動初始化爲默認值。對於原始數字類型,即00.0。對於布爾值,這是false。對於對象,這是null

在其他語言(如C++)中,未初始化數組中的值未定義。有些編譯器可能爲了安全性而初始化爲0/null,並且依賴於此非常糟糕的做法。但是,這種行爲在Java中是很好的定義的,所以創建基本數組並且相信值爲0是完全可以的。

+0

請參閱

+0

https://docs.oracle.com/javase/specs/ jls/se8/html/jls-15.html#jls-15.10.2 –

4

不,所有java數組都填充了適當的類型默認值(0表示int,0.0對於參考,...)

-3

不,它是強制初始化java中的數組..當我編寫我的程序時,我沒有初始化我的數組和我的編譯器(jdk7)給了我出現如下錯誤:

ArrayOne.java:4:變量myArray可能尚未初始化。

因此,我的彙編失敗。

+2

這不是一回事:它是說你從未初始化數組*變量*,而不是它的組件。它也會爲非數組變量做同樣的事情。這個要求被稱爲*明確賦值*。 –

+0

如果您想知道,請參閱[JLS第4.12.5節](https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5 ):「局部變量(§14.4,§14.14)必須在使用前通過初始化(§14.4)或賦值(§15.26)以一種可以使用確定規則進行驗證的方式顯式給出一個值(§16(確定作業))。「 –

+0

感謝您的參考.. –

5

根據語言規範,新初始化的int[]將填充零。

參照JLS §10.6 (Array Initializers):創建指定長度的

的一維陣列,並且該陣列的每個組件被初始化爲默認(§4.12.5)值。

參照§4.12.5

  • 每個類變量,實例變量,或陣列部件被初始化時創建它的默認值(§15.9,§15.10.2):
    • 對於字節類型,默認值爲零,即(字節)0的值。
    • 對於short類型,默認值爲零,即(short)0的值。
    • 對於int類型,默認值爲零,即爲0.
    • 對於long類型,默認值爲零,即0L。
    • 對於浮點類型,默認值爲正零,即0.0f。
    • 對於double類型,默認值爲正零,即0.0d。
    • 對於char類型,默認值爲空字符,即'\ u0000'。
    • 對於布爾類型,默認值爲false。
    • 對於所有引用類型(§4.3),默認值爲空。
0

你不能跳過陣列初始化,但你不必初始化每個數組的元素。如果不初始化數組中的元素,它的工作原理與如果未初始化該特定類型的成員變量時類似:Java將使用數字基本類型爲0的類型默認值(int, double,float ...),false for booleans and null for objects(String included)。

相關問題