Unterschied int[] x = new int[]{...}, int[] x = {...}
-
Ja, also im Titel steht eigentlich schon alles. Ich frage mich was der technische Unterschied zwischen folgenden Deklarationen ist:
int[] array = new int[]{1, 2, 3};
und
int[] array = {1, 2, 3};
Mit der ersten Variante kann ich auch einer Methode ein initialisiertes Array übergeben:
methode(new int[]{1, 2, 3});
Ohne new geht das nicht.
Wird bei der Variante ohne new das Array auf dem Stack angelegt?
Edit: OK, das Array wird nicht auf dem Stack angelegt. Ich konnte auf ein von einer Methode zurückgeliefertes Array zugreifen.
Danke für die Antworten
-
http://www.tutorialspoint.com/java/java_arrays.htm
Unter "Create Arrays" sollte das stehen, was du wissen willst.
-
In dem Tutorial werden zwar beide Varianten verwendet, allerdings wird nicht darauf hingewiesen oder der Unterschied genannt.
Vielleicht gibt es auch keinen Unterschied und bei der Initialisierung wird einfach eine weitere syntaktische Variante zugelassen um z.B. C++-Programmierern entgegenzukommen.
-
Alternatively you can create arrays as follows
Sollte also das gleiche machen / aequivalent sein.
-
Die Varianten sind in der Tat identisch.
public void method1() { int[] array = new int[] {1, 2, 3}; } public void method2() { int[] array = {1, 2, 3}; }
Bytecode:
public void method1(); Code: 0: iconst_3 1: newarray int 3: dup 4: iconst_0 5: iconst_1 6: iastore 7: dup 8: iconst_1 9: iconst_2 10: iastore 11: dup 12: iconst_2 13: iconst_3 14: iastore 15: astore_1 16: return LineNumberTable: line 3: 0 line 4: 16 public void method2(); Code: 0: iconst_3 1: newarray int 3: dup 4: iconst_0 5: iconst_1 6: iastore 7: dup 8: iconst_1 9: iconst_2 10: iastore 11: dup 12: iconst_2 13: iconst_3 14: iastore 15: astore_1 16: return LineNumberTable: line 7: 0 line 8: 16
-
Es gibt etwas aehnliches mit Strings:
String a = "Hallo!"; String b = "Hallo!";
vs.
String a = new String("Hallo!"); String b = new String("Hallo!");
Im Gegensatz zu dem Array Beispiel weiter oben kann es bei den Strings einen erheblichen unterschied machen. Strings sind "immutable", koennen also nach der Erzeugung nicht mehr veraendert werden. Das heisst, dass man schon vorhandene Strings unter umstaenden wiederverwenden kann. Hier ist es so, dass im ersten Fall der String wiederverwendet werden koennte. Im zweiten Fall wird explizit gesagt, dass immer ein neuer String angelegt werden soll. Deswegen koennte die zweite Variante mehr Speicherplatz benoetigen.
Allerdings ist das Verhalten des Compilers hier sicherlich nicht garantiert. Man koennte sicherlich also auch einen Compiler finden, der in beiden Faellen den gleichen Bytecode erzeugt.
Aehnlich zu den Strings verhaelt es sich z. B. auch mit Integer-Objekten oder anderen Objekten, die immutable sind. Aber wie schon gesagt: Arrays gehoeren nicht dazu.
-
Dieser Beitrag wurde gelöscht!