Sogar noch stärker: Man darf dann keine Größe mehr angeben.
Aus Sicht der Java Spezifikation sind das zwei unterschiedliche Ausdrücke:
- nur die reine Erstellung mit new ist eine "Array Creation Expression" (Da muss für mindestens die erste Dimension eine Größe angegeben werden.)
- Die Initialisierung ist ein "Array Initializer"
(Die jeweiligen Kapitel und Links habe ich mal weggelassen)
Du kannst es also ausprobieren: Mit Größe wird der Compiler den Ausdruck nicht mögen. Erklären kann man sich das auch in etwa so: Der Compiler muss schauen, was er vor sich hat und was nicht. Wenn der Compiler ein
new int[5]
findet, dann ist dies schon eindeutig für ihn: Eine "array creation expression" liegt vor. Daher meckert er, dass die "{" unerwartet ist - er hätte da gerne einen Abschluss mit einem ";".
Wenn der Compiler aber keine Größe hat, dann weiss er: Eine array creation expression ist es nicht und schaut weiter. Er erwartet also kein ";" sondern sieht mit der { dann den array initializer.