2013-03-02 4 views
13

Vedo spesso gli array di essere inizializzati in questo modo:Inizializzazione dell'array con valori - dovrei istanziare esplicitamente la classe o no?

String[] array = new String[] { "foo", "bar", "baz" }; 

Ma leggendo il Language Basics - Arrays evidenzia che il breve sintassi non richiede esplicitamente instancing il costruttore:

In alternativa, è possibile utilizzare la sintassi di collegamento per creare e inizializzare un array:

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

Quindi, supponendo che questi due metodi di inizializzazione:

String[] array = new String[] { "foo", "bar", "baz" }; 
String[] array2 = { "foo", "bar", "baz" }; 

C'è qualche differenza tra questi? Entrambi sembrano funzionare allo stesso modo, in questo caso dovrei supporre che il secondo implichi implicitamente lo new String[] e che il primo sia solo un modo più prolisso o ci sia dell'altro dietro le quinte?

A partire da Java, mi dispiace se questa è una domanda troppo stupida, ma non ho trovato nulla su questo nel web.

risposta

13

I due metodi sono equivalenti. Notare, tuttavia, che la sintassi concisa può essere utilizzata solo nelle dichiarazioni variabili. All'esterno dichiarazioni di variabili è necessario utilizzare la sintassi verbose:

String[] array; 
    array = new String[] { "foo", "bar", "baz" }; // OK 

    String[] array2; 
    array2 = { "foo", "bar", "baz" };    // ERROR 

Per ulteriori discussioni, vedi this answer.

6

C'è qualche differenza tra questi?

Non c'è differenza nel risultato finale. Tuttavia, secondo the JLS § 10.6, you cannot use the array initializer synax in every context.

Un inizializzatore matrice può essere specificata in una dichiarazione (§8.3, §9.3, §14.4), o come parte di un'espressione creazione matrice (§15.10), per creare un array e fornire alcuni valori iniziali.

+1

Mi piacciono i collegamenti spec, grazie mille. Ma credo che la risposta di NPE sia più chiara/semplice per i futuri utenti Java che potrebbero venire a leggere la domanda. +1 per entrambi in ogni caso. '=]' –

0

Poiché gli array sono destinato essere mutabile, ha senso che ciascuno sia una nuova istanza

String[] array1 = { "foo", "bar", "baz" }; 
String[] array2 = { "foo", "bar", "baz" }; 

cioè modificando array1 non influirà array2.

+1

Ho una base OO decente e capisco che ogni array è una nuova istanza, la domanda era specificatamente se 'new String []' ha fatto alcuna differenza nell'inizializzazione dell'array. –

Problemi correlati