2012-10-31 55 views
1

爲什麼空陣列自動初始化內容?

int alone; 
System.out.println(alone); 

給出了錯誤,但

int[] arr = new int[1]; 
System.out.println(arr[0]); 

等於0? 當您初始化一個空數組時,它是否會自動將其內容初始化爲0(或null等)?

回答

6

the language standard

否則,一維陣列被創建指定長度的,並且陣列的每個組件被初始化爲默認值(第4.12.5)。

和默認值是:

  • 對於類型字節,默認值是零,即,(字節)的值0。

  • 對於short類型,默認值爲零,即(short)的值爲0。

  • 對於int類型,默認值是零,即,0

  • 對於類型長,默認值是零,即,0L。

  • 對於浮點類型,默認值爲正零,即0.0f。

  • 對於double類型,默認值爲正零,即0.0d。

  • 對於char類型,默認值爲空字符,即'\ u0000'。

  • 對於布爾類型,默認值爲false。

  • 對於所有參考類型(第4.3),缺省值爲空。

4

是的,對於原始類型(布爾和字符除外),它將被默認爲零。如果對象類型將默認爲null

This java tutorial may help you。

注意:當woot4Moo回答時,這僅適用於實例變量。如果局部變量,那麼它不會被默認爲任何。

+2

不正確,布爾值不初始化爲零。 char也不初始化爲零。 – Woot4Moo

+0

@ Woot4Moo:同意更新。 – kosa

+0

實例數組變量與本地數組變量沒有區別,因爲調用'new'時發生此初始化。我不認爲'new'有任何區分實例變量和局部變量的方法。 –

2

是的,對於基本類型number arrays,它0初始化,爲boolean[],它false初始化,爲char[],它NULL(ASCII value 0)初始化和objects [] including String[]null初始化。

+0

@BheshGurung在我糾正的時候,我得到了兩個反對票。非常快:) –

+0

和他是不正確的'0'的數字有浮動和雙打,得到'0.0' – Woot4Moo

+0

我不明白這個答案投票的原因。 – Jimmy

1

這取決於它在哪裏被聲明(在函數內部的一個類中)。如果它是一個類成員變量,它將被初始化爲默認值。數字類型爲0(float類型爲0.0/double),字符串爲null,布爾值爲false,對象爲null。如果在函數內聲明它,它將在int alone的情況下保持未初始化。就數組而言,它將始終初始化其中包含的值。

+0

downvote porque? – Woot4Moo

+0

請注意,在使用'new'顯式初始化數組之後,OP詢問數組的*元素*。這與成員變量在聲明中獲取默認值的問題不同。 –

+0

我還在輸入我的評論= p –

2

這裏涉及到兩個相似的問題。首先請注意,所有變量類型都有一個默認值,這取決於類型。至少有兩次使用這些默認值:1)聲明一個成員變量,2)用new運算符初始化一個數組。

注意,如果你只是聲明一個本地數組變量而不用new進行初始化,那麼當你聲明一個簡單的int變量時,你會得到同樣的錯誤。這是因爲所有的局部變量都必須被初始化。他們沒有得到一個自動默認值。

另一方面,成員變量確實得到一個默認值。同樣,當您使用new運算符創建數組對象時,數組的元素將被初始化爲適當的默認值。