Announcement

Collapse
No announcement yet.

String = Objekt, aber auch call-by-reference?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String = Objekt, aber auch call-by-reference?

    Wie ein Array ist in Java auch ein String eine Instanz. Wird ein String daher auch per "call-by-reference" übergeben?

    (Habe leider (noch) keine Entwicklungsumgebung und arbeite mich deshalb vorerst nur in die Theorie ein.)

  • #2
    Intern wird nur die Referenz übergeben.
    Christian

    Comment


    • #3
      Richtig, auch bei Strings wird - wie bei allen Objekten - immer "nur" die Referenz übergeben.

      Allerdings kann man das übergebene String-Objekt trotzdem nicht ändern, da String unveränderlich ist. Alle Methoden von String liefern ein neues String-Objekt, das ursprüngliche bleibt erhalten (solange es referenziert wird und daher nicht der Garbage Collection zum Opfer fällt).

      Siehe die Javadoc zur Klasse java.lang.String:
      "Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings."

      Der Umstand, daß Strings unveränderlich sind, könnte bei Anfängern zu Irritationen über die Übergabe als Referenz führen.
      Zum Beispiel:
      Code:
      String a = "a";
      List list = new ArrayList();
      list.add(a);
      String b = a.toUpperCase();
      Nach der letzten Code-Zeile enthält die Variable a den String "a" und die Variable b den String "A", in der Liste ist natürlich "a" enthalten.

      In der Hoffnung, geholfen zu haben,
      Stefan

      Comment


      • #4
        Ok, danke. das hilft weiter.

        eine Situation noch:

        Code:
        String a = "hallo";
        String b = a;
        b +=  "!";
        system.out.println(a);
        Die Ausgabe ist "hallo", oder?

        Comment


        • #5
          Richtig.

          Zuerst wird der String "hallo" erzeugt und der Variablen zugewiesen, dann auch der Variablen b zugewiesen.
          Die dritte Zeilen sind zwei Befehle in einem: Es wird ein neuer String "hallo!" aus den beiden Strings "hallo" und "!" gebildet und dann der Variablen b neu zugewiesen.

          Comment


          • #6
            Also anders als bei einem Array

            Code:
            String a[] = new string[2];
            a[0] = "hallo";
            a[1] = "ollah";
            
            String b[] = a[];
            b[0] = "blabla";
            system.out.println(a[0]);
            Hier wäre die Ausgabe - sofern ich es richtig verstehe - "blabla".

            Btw: k.a. ob der Code so korrekt ist, aber der Sinn kommt glaub rüber.

            Comment

            Working...
            X