Arrays mit Werten initialisieren
lima-city → Forum → Programmiersprachen → Java
array
befehl
code
dumme frage
ende
erstellte array
erzeugen
feld
frage
geschrieben code
glauben
leere array
leeres array
objekt
programm
sache
schleife
speichern
spezielles objekt
variable array
-
Mal eine ganz dumme Frage.
Folgendes Beispiel;
int[] array = {1, 2, 3};
ist das Gleiche wie;
int[] array = new int[3]; array[0] = 1; array[1] = 2; array[3] = 3;
Ist doch aber nicht das Gleiche wie?
int[] array = new int[3]; array = new int[]{1,2,3};
Hier wird doch ein zusätzliches Objekt erstellt ?
Geht es nicht irgendwie das Array mit Werten zu initialisieren, ohne eine Schleife oder ein neues Objekt zu erzeugen?
Also wie im nächsten Beispiel (Pseudocode)
int[] array = new int[3]; array = {1,2,3};
Hab es auch mit array = int[]{1,2,3}; versucht, das wird aber auch nicht akzeptiert. Verstehe nicht, warum.
EDIT:
In einer Methode, welche häufiger aufrufen wird, benutze ich;
int[] array = new int[3]; array = new int[]{1,2,3};
Ist das schlimm? Was geschieht mit den alten new int[], werden sie vom Garbagecollector beseitigt?
Beitrag zuletzt geändert: 31.10.2010 12:09:59 von cglabs -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich glaube, du verwechselst da zwei Sachen. Zunächst:
Gleichwohl ich diese Schreibweise noch nie gesehen habe: Das Feld "array" wird einfach überschrieben. Da bleibt nichts zurück, denn es gibt nur diese Variable. Du initialisierst sie hier einfach doppelt! Der Befehl "new" sagt hier nicht aus, dass ein neues Objekt erstellt wird, sondern, dass die Variable "array" ein neuer int ist.int[] array = new int[3]; array = new int[]{1,2,3};
Zu deiner Frage: Initialisieren ohne Schleife geht, so wie du es schon erkannt hast so:
int[] array = {1, 2, 3};
-
toolz schrieb:
Ich glaube, du verwechselst da zwei Sachen. Zunächst:
Gleichwohl ich diese Schreibweise noch nie gesehen habe: Das Feld "array" wird einfach überschrieben. Da bleibt nichts zurück, denn es gibt nur diese Variable. Du initialisierst sie hier einfach doppelt! Der Befehl "new" sagt hier nicht aus, dass ein neues Objekt erstellt wird, sondern, dass die Variable "array" ein neuer int ist.int[] array = new int[3]; array = new int[]{1,2,3};
Ist ein Array nicht ein spezielles Objekt? So wie Strings?
In diesem Fall würde die variable "array" nämlich einen Pointer auf das mit "new int[3]" erstellte array enthalten. Dann kümmert sich der Garbagecollector darum.
Im Endeffekt läuft es aber auf das selbe hinaus: Es wird ein leeres Array erstellt und dann überschrieben.
int[] array = new int[3]; array = new int[]{1,2,3};
Bewirkt das gleiche wie
int[] array; array = new int[]{1,2,3};
oder kürzer geschrieben
int[] array = new int[]{1,2,3};
Nur das die erste Lösung ein leeres Array erstellt und dann wegwirft. Also sonnlos Rechenkapazität verpulvert. -
Wieso solltest du ein leeren Array erzeugen, wenn du schon weißt, was einmal darin stehn soll?
Achso, ja das leere Array wird vom GarbageCollector entfernt, dazu muss man aber wisen, dass er als ein Deamon mit geringer Priorität im Hintergrund läuft, das heißt es kann auch durchaus sein, dass dein Array bis zum Ende des Programms im Speicher bleibt je nachdem wie lang (nweisungen und Laufzeit) und speicherintensiv dein Programm ist.
Beitrag zuletzt geändert: 31.10.2010 16:55:32 von reimann -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage