Hi,
schreibe am Montag ne Klausur in Objekt Orientierter Programmieren in Java und kenne leider kein Java Forum, hoffentlich kann mir trotzdem jemand weiterhelfen.
Es geht um folgendes. Methodenaufrufe sind in Java ja ausschließlich Call by Value. Da bis auf die elementaren Datentypen alle Datentypen Objekte sind und man bei einem Methodenaufruf daher immer eine Referenzvariable übergibt hat man im Prinzip dann aber doch Call by Reference und kann in einer Methode ein Objekt so verändern, dass ausserhalb der Methode die Änderungen auch wirksam sind (da man ja auf dem Objekt arbeitet).
So jetzt gehört String aber nicht zu den elementaren Datentypen, sondern ist eine Klasse. Deshalb dachte ich eigentlich, wenn ich einen String an eine Methode übergebe und ihn dort verändere, so ändere ich ja etwas am String Objekt und wenn ich jetzt ausserhalb der Methode darauf zugreife sind die Änderungen dort ebenso wirksam gewesen.
Hab das ganze dann einmal mit der Standard String Klasse, und einmal mit einer eigenen ausprobiert:
Delphi-Quellcode:
class MyString{
String str;
}
public class Test {
static void manipulate(String a){
a="LOL";
}
static void manipulate(MyString a){
a.str="LOL";
}
public static void main(String[] args){
String test=new String("Hallo");
manipulate(test);
System.out.println(test);
MyString test1=new MyString();
test1.str="Hallo";
manipulate(test1);
System.out.println(test1.str);
}
}
Nur ist es so, dass das erste println "Hallo" ausgibt, das zweite aber wie erwartet "LOL". Kann mir jemand diese Sonderstellung des String Objektes erklären?
edit: Ich glaub ich habs schon gefunden. Mit a="LOL"; erzeuge ich ja ein neues String Objekt auf das die Referenzvariable a zeigt. Diese ist aber nur eine Kopie der Referenzvariable die auf Test zeigt (Call by Value eben), so dass sich ausserhalb der Methode natürlich nichts verändert.
Hatte das ganze auch mit a.concat("..."); probiert, also dem String etwas anzuhängen versucht, aber wie ich grad gelesen hab wird dabei auch nur ein neuer String zurückgegeben und nicht der alte verändert.
Toll wie es manchmal hilft sein Problem in nem Forum zu posten nur um es dann 2 Minuten später selbst zu lösen