Die Zeichenfolgenverbindung in Java (Die Zeichenfolgenverbindung in Java), Lektion, Seite 723875
https://www.purl.org/stefan_ram/pub/zeichenfolgenverbindung_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Die Zeichenfolgenverbindung »…+…« in Java 

Einführendes Beispiel

Zwei Zeichenfolgen können durch den Operator »+« zu einer einzigen Zeichenfolge verbunden werden.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "ab" + "cde" ); }}
Protokoll
abcde

Wir bezeichnen diese Operation als Zeichenfolgenverbindung  oder Zeichenfolgenverkettung.

Typanforderungen

Ein Operand des Operators »+« kann nun jeden der bisher behandelten Typen »int«, »double« oder »java.lang.String« als Typ haben.

Typregeln

Ist der Typ eines Operanden »java.lang.String«, so hat das Ergebnis der Addition den Typ »java.lang.String«.

Typregeln für den Fall, daß ein Operand den Typ »java.lang.String« hat
java.lang.String  + … → java.lang.String 
+ java.lang.String java.lang.String 

Sind beide Operanden numerisch, so gelten die schon in einer früheren Lektion behandelten Typregeln (dieselben wie bei der Division und Multiplikation).

Typregeln (andere Formulierung)
int  + int int 
double  + … → double 
+ double double 

Semantik

Der Wert eines Additionsausdrucks mit einer Zeichenfolge ist die Verbindung (Verkettung, Hintereinanderschreibung) der Zeichenfolgen (Zeichenketten) der beiden Operanden. Falls einer der Operanden einen anderen Typ als »java.lang.String« hat, so wird sein Wert zunächst in eine Textdarstellung vom Typ »java.lang.String« umgewandelt.

Beispiele

Das folgende Beispiel zeigt eine einfache Zeichenfolgenverkettung.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "1." + "2.a" ); }}
Protokoll
1.2.a

Wir können nun auch den Unterschied zwischen »"abc"« und »"abc "« verdeutlichen.

Bei einer Verkettung von »["abc"]« mit »["d"]« werden die vier Buchstaben einfach hintereinander gesetzt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "abc" + "d" ); }}
Protokoll
abcd

Bei einer Verkettung von »["abc "]« mit »["d"]« bleibt das Leerzeichen am Ende von »["abc "]« erhalten und erscheint auch im Ergebnis.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "abc " + "d" ); }}
Protokoll
abc d

Zeichenfolgenverbindung mit Zahlen

Umwandlung in eine Zeichenfolge

Bei Ausdrücken der Signatur ›int+java.lang.String‹, ›java.lang.String+int‹, ›double+java.lang.String‹ oder ›java.lang.String+double‹ wird der numerische Operandenwert mit demselben Verfahren wie bei einer Ausgabe in eine Zeichenfolge gewandelt  und anschließend eine Verkettung  der beiden Zeichenfolgen vorgenommen.

Im folgenden Beispiel ist der erste Summand numerisch  und der zweite eine Zeichenfolge.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 + "3a" ); }}
java.lang.System.out
23a

Im folgenden Beispiel ist der erste Summand eine Zeichenfolge  und der zweite numerisch.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "2" + 3 ); }}
java.lang.System.out
23

Verfahren der Umwandlung ⃗

Die folgenden Programmbeispiele zeigen, daß bei der Wandlung eines numerischen Operanden in eine Zeichenfolge dasselbe Verfahren verwendet wird wie bei der Ausgabe: int-Werte werden durch eine Ziffernfolge ohne Punkt  dargestellt, double-Werte werden nach der Wandlung mit einem Punkt  gekennzeichnet.

Im folgenden Beispiel wird ein int-Wert in eine Zeichenfolge gewandelt, dabei findet sich kein  Punkt ».« im Ergebnis der Wandlung.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 + "|" ); }}
Protokoll
2|

Im folgenden Beispiel wird ein double-Wert in eine Zeichenfolge gewandelt, dabei findet sich ein Punkt  ».« im Ergebnis der Wandlung.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2. + "|" ); }}
Protokoll
2.0|

Ergebnis als Operand ⃗

Das Ergebnis einer Verbindung kann wieder als Operand verwendet werden und durch seinen Typ »java.lang.String« eine weitere Verbindung herbeiführen. So berechnet das folgende Programm nicht etwa »5« als Summe von »2« und »3«, sondern verkettet »2« und »3« zu »23«, da der linke Operand (die Klammer) in »( "a" + 2 )+ 3« den Typ »java.lang.String« hat.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( "a" + 2 )+ 3 ); }}
Protokoll
a23

Dasselbe Ergebnis erhält man auch ohne die Klammer.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "a" + 2 + 3 ); }}
Protokoll
a23

Auch das folgende Programm verkettet  »2« und »3«, da der rechte Operand (die Klammer) in »2 +( 3 + "a" )« den Typ »java.lang.String« hat.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 +( 3 + "a" ) ); }}
Protokoll
23a

Numerische Addition als Operand ⃗

Im folgenden Programm wird hingegen die arithmetische Summe von »2« und »3« berechnet, da in der Addition »2 + 3« kein  Operand den Typ »java.lang.String« hat.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 2 + 3 )+ "a" ); }}
Protokoll
5a

Linksassoziativität ⃗

Wie schon behandelt wurde, wird ohne Klammerung bei einer Addition der Form » + + « zuerst die am weitesten links  stehende Summe auswertet. (Dabei stehen die Ellipsen »« für Literale, Klammerausdrücke, Produkte oder Quotienten.)

In dem folgenden Programmbeispiel wird daher zuerst eine numerische Summe 1 + 2«) berechnet und erst danach eine Zeichenfolgenverbindung 3 + "4"«) vorgenommen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 1 + 2 + "4" ); }}
java.lang.System.out
34

In dem folgenden Programmbeispiel wird entsprechend schon bei der ersten Addition (»"1" + 2«) eine Zeichenfolgenverbindung  vorgenommen, der dann eine zweite Zeichenfolgenverbindung (»"12" + 4«) folgt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "1" + 2 + 4 ); }}
java.lang.System.out
124

Das folgende Programmbeispiel zeigt eine Kombination aller drei Typen »int«, »double« und »java.lang.String«.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 1 + 2.0 + "a" ); }}
java.lang.System.out
3.0a

In dem folgenden Programm wird zuerst «2» durch Verkettung mit «""» in eine Zeichenfolge »2« gewandelt, welche dann mit der Zeichenfolge »3« verkettet wird.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 + "" + 3 ); }}
Protokoll
23

In dem folgenden Programm werden zuerst «2» und «3» numerisch zu «5» summiert, dann wird die Zahl «5» in die Zeichenfolge »5« gewandelt und mit der Zeichenfolge »a« verkettet.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 + 3 + "a" ); }}
Protokoll
5a

Das neutrale Element ⃗⃗

Das folgende Programmbeispiel zeigt, daß die Addition der leeren Zeichenfolge «""» einen Text nicht  verändert (so, wie die Addition von »0« eine Zahl nicht verändert).

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ">" + "" + "<" ); }}
java.lang.System.out
><

Das folgende Programmbeispiel zeigt, daß die Addition der Zahl »0« eine Zahl nicht  verändert.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 1 + 0 + 1 ); }}
transcript
2

Entsprechend sagt man auch, daß die Zahl «0» das neutrale Element der Addition und die leere Zeichenfolge «""» das neutrale Element der Zeichenfolgenverbindung sei.

Anwendungen

Beschriftungen

Die Verbindung einer Zeichenfolge mit dem Ergebnis einer Berechnung kann dazu dienen, ein Ergebnis in einen Text einzusetzen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Die Summe von 2 und 3 ist " +( 2 + 3 )+ "." ); }}
Protokoll
Die Summe von 2 und 3 ist 5.

Auf diese Weise ist es möglich, das Ergebnis einer Berechnung zu beschriften  oder zu erklären.

Angabe von Einheiten

Durch eine Verbindung eines Zahlenwertes mit einer nachgestellten Zeichenfolge kann ein Größe mit einer Einheit  dargestellt werden.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 3 + 7/2. + " cm" ); }}
Protokoll
6.5 cm

Darstellung mehrerer Ergebnisse

Das folgende Programmbeispiel zeigt die Ausgabe der Werte mehrerer  numerischer Ausdrücke (Berechnungen).

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 2 + 3/2 )+ "; " +( 2 + 3/2. ) ); }}
Protokoll
3; 3.5

Wir können nun mit einem Programm mehrere Berechnungen  vornehmen und ihre Ergebnisse alle hintereinander ausgeben – auch mit Beschriftungen und Einheiten.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Masse = " +( 16./2 + 9 )+ " kg, Laenge = " +( 2 + 17./4 )+ " m." ); }}
Protokoll
Masse = 17.0 kg, Laenge = 6.25 m.

Umwandlung in eine Zeichenfolge ⃗

Die Addition des leeren Textes zu einer Zahl wird manchmal verwendet, um diese als Zeichenfolge darzustellen (in eine Zeichenfolge umzuwandeln). Später werden im Kurs auch noch Fälle gezeigt werden, in denen solch eine Umwandlung nützlich ist.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "" + 2 ); }}
java.lang.System.out
2
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 + "" ); }}
java.lang.System.out
2

An den obenstehenden Programmbeispielen kann man aber noch nicht  erkennen, daß wirklich etwas umgewandelt wurde. Das folgende Programm zeigt aber deutlich, daß »( 2 + "" )« eine Zeichenfolge  ist, weil bei der folgenden Addition von »3« eine Verkettung  und keine  arithmetische Summierung vorgenommen wird.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 2 + "" )+ 3 ); }}
transcript
23

Zum Vergleich mit dem vorigen Programm zeigt das folgende Programm die arithmetische  Summierung.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 2 + 0 )+ 3 ); }}
transcript
5

Aufteilung langer Zeichenfolgenliterale

Eine sehr langes Zeichenfolgenliteral kann mit Hilfe des Operators »+« auf mehrere Zeilen aufgeteilt werden.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Grundstuecksverkehrsgenehmigungs" +
"zustaendigkeitsuebertragungsverordnung" ); }}
Protokoll
Grundstuecksverkehrsgenehmigungszustaendigkeitsuebertragungsverordnung

Genauso kann ein einzelnes langes Wort zur besseren Lesbarkeit im Quelltext untergliedert werden.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
(

"Grundstuecks" +


"verkehrs" + "genehmigungs" +


"zustaendigkeits" + "uebertragungs" +


"verordnung"

); }}

Protokoll
Grundstuecksverkehrsgenehmigungszustaendigkeitsuebertragungsverordnung

Übungsfragen ⃗

?   Ausdrücke ⃗

Welche Werte haben die folgenden Ausdrücke jeweils?

A »9 + "C"«
B »1 +( 9 + "C" )«
C »1 + 5 + "A"«
D »2 + 2 + 2 + ""«
E »"" + 2 + 2 + 2«

/   Beschriftung einer Ausgabe ⃗

Drücken Sie mit Java  die Summe 2+3 aus (diese soll nicht  im Kopf ausgerechnet werden) und geben Sie den Wert des von Ihnen geschriebene Ausdrucks dann mit dem Text »2 + 3 = « (acht Zeichen) davor und dem Text ».« (ein Zeichen) dahinter aus.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723875 stefan_ram:723875 Die Zeichenfolgenverbindung in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723875, slrprddef723875, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/zeichenfolgenverbindung_java