Rätsel



  • Umfrage: Wieviel char-Arrays werden hier erzeugt?

    Auswahl Stimmen Prozent
    3 3 20.0%
    4 1 6.7%
    6 0 0.0%
    9 4 26.7%
    11 7 46.7%
    String command = "mark $xa9ß76435!";
    command = command.toUpperCase().trim();
    
    if( command.startsWith("MARK") )
    {
    	String temp = new String( command.substring( "mark".length()).trim() );
    	String substr = temp.substring( command.indexOf('R')).toString().trim().substring(temp.indexOf("9SS") );
    }
    

    Jetzt müsste man wissen, wie java.lang.String funktioniert. 🕶 🤡
    Gibt nen Keks zu gewinnen.



  • Hiermit muss ich leider verkünden, dass die Lösung dieses Rätsels offenbar implementierungsabhängig ist. Laut einem schlauen Java-Buch, wird bei substring() das Array nicht kopiert, sondern der neue String referenziert das alte Array, was ja problemlos geht, weil Strings immutable sind. Damit wäre die Lösung 3 gewesen. (Je 1 für command = ..., toUpperCase(), new String() )

    Jetzt habe ich aber mal den Quellcode von String angeschaut und was sehe ich? System.arraycopy(), System.arraycopy(), ...
    Eigentlich ziemlich schlecht gemacht. 🙄



  • Entschuldige meine Begriffsstutzigkeit, aber wo soll da überhaupt ein char-Array herkommen?
    Wenn mir in der entsprechenden Vorlesung kein Mist erzählt wurde, dann haben Java-Strings intern nichts mit char-Arrays zu tun. Also wird auch durch wildes Rumschnipseln keins angelegt. Ein Aufruf von toCharArray() kann ich auch nicht entdecken ...



  • Doch, Strings verwalten natürlich ein char-Array.
    Es wird nur immer sehr darauf geachtet, zu Unterscheiden zwischen char-Array und String, da Strings immutable sind.



  • Danke für die Aufklärung.

    (
    Vielleicht sollte ich Sätze in Zukunft zu Ende lesen. 😉

    Skript schrieb:

    Insbesondere sind Strings, obwohl sie im Deutschen als
    "Zeichenkette" bezeichnet werden, keine Folgen (oder Felder,
    Arrays) von Zeichen (char), die einzeln modifiziert werden können
    (anders als zum Beispiel in C/C++!)

    )


Anmelden zum Antworten