HAllo Peter,
Du kannst diese Art der Zuweisung nur bei der Initialisierung verwenden, also
int[] myArray = {1,2,3,4};
Das hat etwas mit der Art und Weise zu tun, wie Arrays in Java implementiert sind.
Diese Stelle aus dem Insel-Buch fasst die Fakten schön zusammen:
3.8.8 Vorinitialisierte Arrays
Wenn wir in Java ein Array-Objekt erzeugen und gleich mit Werten initialisieren wollen, dann schreiben wir etwa:
int[] primi = { 2, 5, 7, 11, 13 };
Wollen wir uns erst nach der Variablendeklaration für die Feldinhalte interessieren und sie gegebenenfalls auch ändern, schlägt ein Versuch wie der folgende fehl:
int[] primi;
primi = { 2, 5, 7, 11, 13 };
ausgleichsgerade( { 1.23, 4.94, 9.33, 3.91, 6.34 } );
Zur Lösung gibt es zwei Ansätze. Die erste ist die Einführung einer neuen Variablen:
int[] primi;
int[] tmpprimi = { 2, 5, 7, 11, 13 };
primi = tmpprimi;
Dann gibt es eine Variante des new-Operators, der durch ein Paar eckiger Klammern erweitert wird. Es folgen in geschweiften Klammern die Initialwerte des Arrays. Die Größe des Arrays entspricht genau der Anzahl der Werte. Für die oberen Beispiele ergibt sich folgende Schreibweise:
int[] primi;
primi = new int[]{ 2, 5, 7, 11, 13 };
ausgleichsgerade( new double[]{ 1.23, 4.94, 9.33, 3.91, 6.34 } );
Da, wie im zweiten Beispiel, ein initialisiertes Feld mit Werten gleich an die Funktion übergeben wird und keine zusätzliche Variable benutzt wird, wird diese Art der Arrays »anonyme Arrays« genannt. Eigentlich gibt es auch sonst anonyme Arrays, wie new int[2000].length zeigt. Doch in diesem Fall wird das Feld nicht mit Werten initialisiert.