2012-05-27 492 views
19

我想知道的,初始化數組元

什麼也正是初始化原語的數組的這兩種方式的區別:

int[] arr1 = new int[]{3,2,5,4,1}; 

int[] arr2 = {3,2,5,4,1}; 

,哪一個優先?

+8

沒有區別。停止重視這些微小的細節,並專注於更大的畫面! –

+2

第二位;第一點有什麼意義? –

回答

14

沒有,它們產生完全相同的字節碼。我認爲這可能是第二種形式在舊版Java中不被支持,但那已經有一段時間了。

既然如此,它就成爲一種風格問題,這是個人喜好的問題。由於您特別提出了,更喜歡第二,但它又是一個個人品味的問題。

+0

在較老的java版本中,如果im correcT,新的..對於基元類型是必需的? –

+0

@JimmyGeers:這就是我所說的。 :-) –

+0

該功能添加了什麼版本? – reesjones

6

這兩種說法沒有區別。個人而言,第二個是首選。因爲您擁有大括號中指定的所有元素。編譯器將幫助您計算數組的大小。

因此,無需在賦值運算符後添加int[]

1

在這種情況下,第二個,因爲它的漂亮,更簡潔:)

+0

+1,簡短而甜美 –

7

正如其他人所說,他們是等價的,第二個選項是更簡潔。不幸的是,編譯器並不總是能夠理解第二個選項:

public int[] getNumbers() { 
    return {1, 2, 3}; //illegal start of expression 
} 

在這種情況下,你必須使用完整的語法:

public int[] getNumbers() { 
    return new int[]{1, 2, 3}; 
} 
1

有用在這種情況下

void foo(int[] array) { 

} 

用文字呼叫

// works 
foo(new int[]{5, 7}) 

//illegal 
foo({5, 7}) 
2

就你而言,這兩種風格的效果相同,都是正確的,第二種更簡潔。但實際上這兩種風格是不同的。

記住java中的數組是固定長度的數據結構。一旦你創建了一個數組,你必須指定長度。

沒有初始化,第一種情況是

int[] arr1 = new int[5]; 

第二種情況下,將

int[] arr2 = {0,0,0,0,0}; 

你看有什麼區別?在這種情況下,首選樣式是首選,因爲您不必手動輸入所有這些默認初始值。

對我來說,這兩種風格之間唯一的區別就是在沒有顯式初始化的情況下創建一個數組。