Michael Bieri: Frage/Hinweis: Call by Value bei Objekten

Hallo Leute

ich hatte heute ein sehr komisches Problem erlebt:

MyObject a = new MyObject();
MyObject b = new MyObject();

b.setValue(5);

a=b;

a.setValue(3);

System.out.print(b.getValue);

Quizfrage: Was gibt dieses Programm aus?

Nicht etwa 5, wie man meinen könnte sondern 3! Weil Objekte bei Objekten ja nicht das Objekt "an sich" übergeben wird, sondern nur eine Referenz darauf!
Einerseits möchte ich alle, die dieses Problem noch nicht gehabt haben, darauf hinweisen, es hat mir heute den ganzen Tag gekostet und ich habe es auch nur zufällig entdeckt...
Nun meine Frage: Wie kann ich denn ein Objekt explizit "by Value" übergeben?

Gruss

Michael

  1. Hallo Michael

    In Deinem Fall müsstest Du das Objekt kopieren:

    MyObject a = new MyObject();
    MyObject b = (MyObject)a.clone();

    Dies geht nur, wenn die entsprechende Klasse java.lang.Cloneable implementiert.
    Die Standardimplementierung kopiert nur das Objekt selbst, nicht Objekte, die selbiges Referenziert.
    Wenn das der Fall sein soll, musst du Object clone() überschreiben.

    Grüße

    Daniel