Anfängerfrage Arrays

Eft

Grünschnabel
Hi!
Tutorial: Java ist auch eine Insel
Bei 3.9.5 steht "Ein Array muss mit dem new-Operator unter Angabe einer festen Größe erzeugt werden."
Weiter oben (bei 3.9.3. z.B.) werden doch auch Arrays erzeugt, dort steht aber weit und breit kein new. :confused:

Eft
 
Hi,
du kannst Arrays auf verschiedene Arten anlegen:

1 : int [] foo = new int[x] , x ist die größe des Arrays. Dies wird am häufigsten benutzt, da du ja noch nicht weisst, welche Werte im Array stehen werden. Es reserviert einfach nur x Speicherplätze für dein Array.
2 : int [] bar = {1,2,3,4,5,6} , hier gibst du direkt den Inhalt des Arrays an, dabei wird dann kei new benötigt. Wird seltener benutzt, nämlich dann wenn du beim erzeugen schon weisst, welche Werte im Array stehen werden. Hier übernimmt Java für dich das erzeugen des Objekts und befüllt das Array auch direkt.

Hoffe ich konnte dir helfen =)
 
Hallo,

dass der Java-Compiler auch bei Fall 2 implizit ein new aufruft, erkennt man, wenn man sich den erzeugten Bytecode anschaut.

Quellcode:
Java:
public class Main {
        public static void main(String[] args) {
                int[] a = new int[10];
                int[] b = {1,2,3,4,5,6,7,8,9,10};
        }
}

Disassemblat (erzeugt mit Jasper):
Code:
…
.method                  public static main([Ljava/lang/String;)V
   .limit stack          4
   .limit locals         3
   .line                 3
   bipush                10
   newarray              int
   astore_1
   .line                 4
   bipush                10
   newarray              int
   dup
   iconst_0
   iconst_1
   iastore
   dup
   iconst_1
   iconst_2
   iastore
…
In beiden Fällen wird also newarray int mit dem Parameter 10 aufgerufen. Aber das nur so nebenbei :)

Grüße,
Matthias
 
Zurück