Per quanto posso dire, questo codice:Dovrei usare `new` con un array inizializzato in linea?
int[] numbers = new int[] { 1, 2 };
è lo stesso di questo codice:
int[] numbers = { 1, 2 };
In realtà, il compilato .class
smonta sullo stesso codice:
1: newarray int
3: dup
4: iconst_0
5: iconst_1
6: iastore
7: dup
8: iconst_1
9: iconst_2
10: iastore
11: astore_1
12: iconst_2
Tuttavia, codice simile non sempre esegue allo stesso modo, o anche compilare. Ad esempio, si consideri:
for (int i : new int[] { 1, 2 }) {
System.out.print(i + " ");
}
Questo codice (in un metodo principale) compila e stampa 1 2
. Tuttavia, la rimozione del new int[]
per rendere la seguente:
for (int i : { 1, 2 }) {
System.out.print(i + " ");
}
genera più errori di compilazione, cominciando con
Test.java:3: error: illegal start of expression
for (int i : {1, 2}) {
^
presumo che la differenza tra questi due esempi è che nel primo esempio (con int[] numbers
), il tipo int
è esplicitamente indicato. Tuttavia, se questo è il caso, perché Java non può inferire il tipo di espressione dal tipo di i
?
Ancora più importante, ci sono altri casi in cui le due sintassi differiscono, o dove è meglio usare l'una rispetto all'altra?
@LuiggiMendoza Grazie per il link utile. Tuttavia, non sono sicuro che risponda completamente alla domanda: vale a dire, ci sono altri casi in cui le sintassi differiscono? – wchargin
Controlla tutte le risposte, non solo quella superiore. –
Suppongo che tu ti stia riferendo a [questo] (http://stackoverflow.com/a/16697404/732016) di erickson. Questa risposta lo spiega per i metodi, ma non per i cicli "for", dove il tipo è esplicitamente dichiarato e non vi è alcun rischio di circolarità. – wchargin