20 Typenumwandlung
20.1 Implizites Casten
 
Das Pluszeichen ist überladen. Wir betrachten die folgende Java-Programmsequenz:

int a = 2;
int b = 3;
System.out.println("Die Summe ist: "+ a+b);
System.out.println("Die Summe ist: "+ (a+b));

Die Ausgaben, die die beiden letzten Zeilen verursachen, lauten

Die Summe ist: 23
Die Summe ist: 5

Was geschieht? Die Methode (der "Befehl") println erzeugt ein Stringobjekt, das auf dem Bildschirm ausgegeben wird. Was steht in diesem Stringobjekt? Zunächst die Zeichenkette, die zwischen den Anführungsstrichen "... " steht. Das Pluszeichen, das in unserem Fall dieser Zeichenkette folgt, zeigt an, dass eine weitere Zeichenkette angehängt (=konkateniert) werden soll. Es folgt aber der Bezeichner "a" , der für eine Variable vom Typ int steht. Was nun geschieht, ist sehr raffiniert. Der Zahlenwert, der in "a" gespeichert ist, wird automatisch (wir nennen dies implizit) zu einer Zeichenkette umgewandelt und der Zeichenkette "Die Summe ist: "  hinzugefügt. In dem von println erzeugten String steht jetzt also "Die Summe ist: 2".  Der Vorgang wiederholt sich mit dem zweiten Pluszeichen und wir erhalten schließlich: Die Summe ist: 23. Sehr schön erkennt man auch, dass Java den Ausdruck in den Klammern von println von links nach rechts auswertet. 
Die Reihenfolge der Auswertung kann man mit zusätzlichen Klammern beeinflussen, wie die zweite Ausgabe zeigt. Vor der ersten Konkatenation muss das Pluszeichen zwischen "
a" und "b" in der Klammer ausgewertet werden. Da es sich bei "a" und "b" beides mal um Bezeichner für int-Variablen handelt, wird das Pluszeichen als Additionszeichen verstanden und die Klammer dementsprechend zu 5 ausgewertet, bevor ihr Wert wieder als String der Zeichenkette "Die Summe ist: " zu "Die Summe ist: 5" konkateniert wird. Wir erkennen weiter, dass die Bedeutung des '+'- Operators kontextabhängig ist, d.h. die Funktionalität hängt davon ab, in welcher 'Umgebung es steht'. Wir haben gesehen, das das '+'-Zeichen als Konkatenationszeichen aber auch als  Rechenzeichen verstanden werden kann. Wir sagen im Fachjargon: Das '+'-Zeichen ist überladen. Kinder suchen beim sog. Teekesselspiel nach diesen überladenen Begriffen: z.B. Bank. Vom Kontext hängt es ab, ob man eine Institution meint, bei der man ein Kontoführen kann oder ob eine Sitzgelegenheit gemeint ist, die z.B. in einem Park steht.

Man könnte jetzt geneigt sein, folgendes zu versuchen:

int x = 2;
String a = x;

und hoffen, dass bei der Zuweisung a = x der Inhalt bei Ablegen in a eine implizite Typenumwandlung, von einer int-Zahl zu einem String erfährt. Tatsächlich übersetzt der Javacompiler die letzte Zeile nicht und meldet einen Fehler. Man könnte die letzte Zeile durch

String a = ""+x;

 

casten ersetzten, um das gewünschte zu erreichen. Das Pluszeichen konkateniert den Leerstring mit dem zu einem String gewandelten Inhalt von x. Um Missverständnisse zu vermeiden, betonen wir, dass der Inhalt von x unverändert eine int-Zahl bleibt. Wir benutzen deshalb lieber den Begriff casten. Beim Konkatenieren handelt es sich um ein implizites Catsen: Ohne dass es explizit verlangt wird, "erkennt" der Compiler am Kontext, dass eine Typenumwandlung vorgenommen werden soll. 
 
zu 20.2 Explizites Casten
zur Startseite www.pohlig.de  (C) MPohlig 2003