Anfängerfrage: Char-Array deklarieren



  • Hallo zusammen,

    ich bin neu in Java und habe gleich eine Frage bezüglich der Deklaration eines char-Arrays. Ich hatte es so versucht, doch war der Compiler damit nicht einverstanden:

    char word[10];
    

    Warum muss es so heißen:

    char word[] = new char[10];
    

    Das sieht mir sehr dynamisch aus. Was ist, wenn ich kein dynamisches Array haben möchte?

    Vielen Dank
    lg, freakC++



  • Was ist daran dynamisch?
    Die [] gehören übrigens hinter den Datentyp, ist schließlich ein Array von chars und nicht ein Array von "word"



  • freakC++ schrieb:

    Warum muss es so heißen:

    char word[] = new char[10];
    

    Die Anweisung besteht sozusagen aus zwei Teilen. Zunächst teilst du dem Compiler mit, dass du eine neue Variable word einführst, die eine Referenz auf ein char-Array ist.

    char word[]
    

    Danach wird mit

    new char[10]
    

    ein neues char-Array im Speicher angelegt und die Referenz darauf in word abgelegt.

    freakC++ schrieb:

    Das sieht mir sehr dynamisch aus. Was ist, wenn ich kein dynamisches Array haben möchte?

    Falls du mit "dynamisch" meinst, dass man word später auf ein anderes Array zeigen lassen kann, hast du Recht. Mit dem Schlüsselwort final kannst du bestimmen, dass der Variable word kein neuer Wert zugewiesen wird.

    final char[] word = new char[5];
    word = new char[10]; // nicht korrekt
    

    gastantwort schrieb:

    Die [] gehören übrigens hinter den Datentyp, ist schließlich ein Array von chars und nicht ein Array von "word"

    Das kann man in Java halten, wie man möchte.



  • freakC++ schrieb:

    Zunächst teilst du dem Compiler mit, dass du eine neue Variable word einführst, die eine Referenz auf ein char-Array ist.

    Da jetzt schon das Wort "Referenz" gefallen ist, und der OT scheinbar von C++ kommt (nur so geraten 😉 ), der Hinweis, dass eine Java-Referenz etwas anderes ist als eine C++-Referenz.



  • Eine Java Referenz ist im Prinzip ein vereinfachter C++ Zeiger. Zeiger klingt aber so böse, weil viele Leute schlicht zu blöd für diese Höllendinger sind, daher haben sich die Javaner gedacht, sie Referenzen zu nennen.

    Und mit dynamisch meint er, dass die Größe nicht zur Compilezeit bekannt sein muss, das ist auch richtig und super heapschonend, leider gehts in Java nicht anders. In C++ entspricht das in etwa einem

    char* word = new char[5];
    

    Ein Object[] entspricht übrigens einem

    Object** o = new Object*[42];
    o[0] = new Object;
    

    Doppelte Dereferenzierung ftw 👍



  • 314159265358979 schrieb:

    Eine Java Referenz ist im Prinzip ein vereinfachter C++ Zeiger. Zeiger klingt aber so böse, weil viele Leute schlicht zu blöd für diese Höllendinger sind, daher haben sich die Javaner gedacht, sie Referenzen zu nennen.

    Das heißt also, dass es in Java keinen Unterschied zwischen Zeigern und Referenzen gibt?

    314159265358979 schrieb:

    Und mit dynamisch meint er, dass die Größe nicht zur Compilezeit bekannt sein muss, das ist auch richtig und super heapschonend, leider gehts in Java nicht anders. In C++ entspricht das in etwa einem

    char* word = new char[5];
    

    Ja, das meinte ich. Der Java-Code war dem C++ sehr ähnlich und in C++ ist das eine dynamische Deklaration. Nunja, Java ist aber nicht C++..:D. Trotzdem war ich leicht verwirrt.

    Vielen Dank und
    lg, freakC++



  • freakC++ schrieb:

    Das heißt also, dass es in Java keinen Unterschied zwischen Zeigern und Referenzen gibt?

    Die Referenzen wie man sie aus C++ kennt gibt es in der Form in Java nicht. Java Referenzen sind, wenn man so will, eine Mischung aus C++ Zeigern und C++ Referenzen. Die Semantik entspricht der der Referenzen, aber man kann sie eben auch nullen. Mehr von einem Zeiger ist da nicht mehr übrig.



  • 314159265358979 schrieb:

    Die Semantik entspricht der der Referenzen, aber man kann sie eben auch nullen. Mehr von einem Zeiger ist da nicht mehr übrig.

    Und Referenzen werden per Kopie übergeben (klingt zugegebenermaßen sehr widersprüchlich):
    http://www.javaranch.com/campfire/StoryPassBy.jsp



  • Zeiger übergibt man in C++ normalerweise auch als Kopie. C++ Referenzen sind keine Objekte und können daher nicht "als Kopie" übergeben werden.


Anmelden zum Antworten