zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Könnte ausgeben() die Referenz auf das ursprüngliche Stringobjekt verwenden, um den Inhalt dieses Objekts zu ändern?

Antwort:

Nein — da Stringobjekte unveränderbar sind. Nicht einmal die main() Methode kann das ursprüngliche Objekt ändern.

Unveränderbare Strings

class MeinPunkt
{
  public int x=3, y=5;

  public void ausgeben()
  {
    System.out.println("x = " + x + "; y = " + y );
  }
}

class PunktTester
{
  public static void main ( String[] args )
  {
    MeinPunkt pt = new MeinPunkt();

    pt.ausgeben();

    pt.x = 45;  pt.y = 83;

    pt.ausgeben();
  }
}

Es ist gut, dass Stringobjekte unveränderbar sind, weil dadurch die main() Methode sicher sein kann, dass ihre Variable mitteilung vollständig unter ihrer Kontrolle bleibt. Obwohl die ausgeben() Methode eine Kopie der Referenz bekommt, kann sie das ursprüngliche Objekt nicht ändern.

Nicht alle Objekte sind unveränderbar.

Wichtig: Öffentliche Instanzvariablen von Objekten können von jeder Methode, die eine Referenz auf das Objekt hat, geändert werden, auch wenn die Referenz ein formaler Parameter ist.

(Wenn eine Instanzvariable weder public noch private ist, kann sie von einer Methode, die in demselben Paket ist, geändert werden. Bis jetzt ist all Ihr Code in demselben Paket, so dass der Effekt der gleiche ist als wäre die Instanzvariable public.)

Das Programm hat eine benutzerdefinierte Klasse und ein Testprogramm.

Die main() Methode verwendet den Standardkonstruktor der Klasse MeinPunkt. Das ist der Konstruktor den Sie automatisch bekommen, wenn Sie selbst keinen definieren.

FRAGE 10:

Was ist die Ausgabe des Programms?
x =   y = 

x = y =