/*
Datei............: Aufg1102.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 18.11.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 11.02
Kommentare.......:

Die Klasse String besitzt keine Methoden, um die eingebettete
Zeichenkette nach dem Anlegen zu ändern. Die Zuweisung eines
Strings s2 an einen String s1 führt ebenfalls nicht dazu, daß 
an der Speicherstelle, an der s1 steht, nun der Inhalt von 
s2 zu finden ist, sondern lediglich dazu, daß s1 nun auch auf
das String-Objekt s2 zeigt. Daß Objekt, auf das bisher s1
zeigte, wird nun nicht mehr gebraucht und (sofern keine weiteren
Referenzen darauf zeigen) irgendwann vom Garabage Collector
zerstört.

Dadurch haben String-Operationen (wie Zuweisung und 
Parameterübergabe an eine Methode) in der Praxis eher den
Charakter von Wert-, als den von Referenzzuweisungen (wie 
etwa in C oder C++). 

Das folgende Listing demonstriert dies mit Hilfe der 
Methode testStringAssignment. Das Programm gibt eben
nicht zweimal "Mund" aus, sondern "Mund" und "Nase". Der
Leser möge sich diesen Sachverhalt bitte genau klarmachen
und ggfs. den aus C/C++ bekannten Funktionen wie strcpy,
strcat, usw. gegenüberstellen.

Die eigentliche Lösung zu dieser Aufgabe wird durch die
Methode stringChangingAssignment demonstriert. Hier wird
gezeigt, daß trotz einer offensichtlichen Zuweisung an
eine per Referenz übergebene Variable der Wert für den
Aufrufer unverändert bleibt. Die Gründe dafür sind exakt
dieselben.
*/
public class Aufg1102
{
  public static void main(String args[])
  {
	//Testing stringChangingMethod
	String s = "hello";
	System.out.println("Vor dem Aufruf: " + s);
	stringChangingMethod(s);
	System.out.println("Nach dem Aufruf: " + s);
	//Testing testAssignment
	testStringAssignment();
  }

  public static void stringChangingMethod(String s)
  {
	s = "kuckuck";
  }

  public static void testStringAssignment()
  {
	String s1 = "Nase";
	String s2 = "Ohr";
	s2 = s1;
	s1 = "Mund";
	System.out.println("s1 = " + s1);
	System.out.println("s2 = " + s2);
  }
}

