kostenloser Webspace werbefrei: lima-city


Arrays mit Werten initialisieren

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    cglabs

    Kostenloser Webspace von cglabs, auf Homepage erstellen warten

    cglabs hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich glaube, du verwechselst da zwei Sachen. Zunächst:
    int[] array = new int[3];
    array = new int[]{1,2,3};
    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.

    Zu deiner Frage: Initialisieren ohne Schleife geht, so wie du es schon erkannt hast so:
    int[] array  = {1, 2, 3};
  4. toolz schrieb:
    Ich glaube, du verwechselst da zwei Sachen. Zunächst:
    int[] array = new int[3];
    array = new int[]{1,2,3};
    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.


    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.
  5. 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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!