2012-09-11 81 views
1

例如,人們可以初始化字符數組爲:在java中,使用「new」初始化數組有什麼好處?

char[] myArray = new char[3]; 
myArray = {'a', 'b', 'c'}; 

或者一個可以初始化字符數組爲:

char[] myArray = {'a','b', 'c'}; 

什麼是使用「新」方法的好處?順便提一下,在第一個例子中,爲什麼我也允許在不將它傳遞給構造方法的情況下(在括號中)賦值{...}集合?

char[] myArray = new char[] {'a', 'b', 'c'}; 
+0

您並不總是事先知道數組的內容 –

回答

2

{and}是一個捷徑語法,這裏數組的長度由{ and }之間提供的值的數量決定。

Arrays Oracle docs

一種方法來創建一個數組與新的運營商。 ArrayDemo程序中的下一個語句爲十個整數元素分配一個具有足夠內存的數組,並將數組賦值給anArray變量。

// create an array of integers 
anArray = new int[10]; 

或者,也可以使用快捷語法來創建和初始化數組:

int[] anArray = { 
100, 200, 300, 
400, 500, 600, 
700, 800, 900, 1000 
}; 
1

如果在編譯時不知道長度,則不能使用字面語法。

char[] buffer = new char[bufferSize]; 

此外,如果默認值(0)很好,您不需要文字語法。

// hard to read, and I probably got the number of entries wrong 
char[] buffer = { 0,0,0,0,0,0,0,0,0,0,0,0 }; 

// easier on the eyes 
char[] buffer = new char[10]; 

至於爲什麼你被允許跳過的「構造」(不知道這是陣列適當的期限),這是因爲編譯器可以推斷出它的類型聲明。

+1

在快捷鍵語法聲明中使用對象可以很好地工作 - 它不僅限於基本類型。 – Makoto

1

你的第一個聲明是非法的 - 你不能實例化和填充使用數組不同線路上的快捷鍵。

至於使用new - 這可以讓你填寫的值,當你得到它們。你唯一知道的將是陣列的至少一個長度。使用方括號意味着你知道尺寸和在實例化時將放入數組的內容。

1

使用新數組的最大好處是當您知道數組的大小 但您想要稍後使用元素進行初始化。在第二個示例中,您知道 要存儲在陣列中,因此當時不需要新建。這些 基本上是聲明數組的兩種合法方式。 HTH, 本

1

我認爲即使在更簡潔的語法是合法的,使用new語法是可取的,因爲它清楚地表明,一個新的對象被創建的每個執行該語句的時間。

1

此說法是不合法的Java:

myArray = {'a', 'b', 'c'}; 

{ ... }語法只能被用作在聲明的初始化,或在陣列new表達。作爲JLS section §10.6說:

「數組初始化可在聲明中指定(§8.3,第9.3節,§14.4),或作爲陣列創建表達式(§15.10)的一部分,以創建一個數組並提供一些初始值。「

所以選擇實際上是

之間
char[] myArray = {'a','b', 'c'}; 

char[] myArray = new char[] {'a', 'b', 'c'}; 

兩種形式之間的區別是純語法。他們的意思是相同的,我希望他們在這個例子中編譯成相同的代碼。唯一實際的區別是,具有明確的new的表單可以用於其他人不能的情況下。


順便說一下,在第一個例子,我爲什麼還允許指定{...}設置不將它傳遞給構造方法(括號中)?

因爲Java數組類型沒有構造函數。

相關問題