Die Zuweisungsanweisung in Java
Wir hatten schon früher erfahren, daß man Aufrufe vor ein Semikolon schreiben darf, um so eine Aufrufanweisung zu schreiben. Ein Zuweisungsanweisung wird auf ähnliche Weise geschrieben.
Einführendes Beispiel
In dem folgenden Beispiel weist die Zuweisungsanweisung »v = 2;« der Variablen »v« den Wert «2» zu.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 7;
v = 2;
java.lang.System.out.println( v ); }}Protokoll
2
Syntax
Eine Zuweisungsanweisung besteht aus einem Zuweisungsausdruck und einem diesem folgenden Semikolon.
- Zuweisungsanweisung (Syntaxdiagramm)
Anweisung
.-----------. .-.
--->| Zuweisung |--->( ; )--->
'-----------' '-'Zuweisung
.------. .-. .----------.
--->| Name |--->( = )-->| Ausdruck |--->
'------' '-' '----------'
Wir können die Auflistung der uns bekannten Anweisungen nun um die Zuweisungsanweisung erweitern.
- Anweisung
Anweisung
.--------------------------------------.
---.--->| Ausgabeanweisung |----.--->
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Aufrufanweisung |----'
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Block |----'
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Variablendeklarationsanweisung |----'
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Zuweisungsanweisung |----'
'--------------------------------------'
Ausführung
Bei der Zuweisungsanweisung wird der Wert der Zuweisung nicht verwendet, die Wirkung ihrer Auswertung tritt aber bei der Ausführung der Zuweisungsanweisung ein.
Das heißt, daß durch eine Zuweisungsanweisung der Wert des Ausdrucks rechts vom Gleichheitszeichen in die Variable links vom Gleichheitszeichen geschrieben wird. Als Anweisung hat die Zuweisungsanweisung aber keinen Wert.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 7;
java.lang.System.out.println( v );
java.lang.System.out.println( v = 4 );
java.lang.System.out.println( v );
v = 3;
v = 2;
java.lang.System.out.println( v ); }}transcript
7
4
4
2
Zuweisung ohne vorherige Deklaration
Eine Zuweisung an eine Variable ist ohne vorherige Deklaration der Variablen nicht erlaubt. Eine Zuweisung ist kein Ersatz für eine Deklaration.
Main.txt
public final class Main
{ public static void main( final java.lang.String[] args )
{ v = 7;
java.lang.System.out.println( v ); }}Protokoll
error: cannot find symbol
{ v = 7;
^
symbol: variable v
location: class Main
Formulierungen in deutscher Sprache
- Java
int v = 7;
- auf deutsch:
- „Deklaration der int-Variablen »v« mit Initialisierung dieser Variablen mit dem Wert des Ausdrucks »7«“
- Java
java.lang.System.out.println( v );
- auf deutsch:
- „Ausgabe des Wertes der Variablen »v«“
- Java
v = 2;
- auf deutsch:
- „Zuweisung des Wertes des Ausdrucks »2« an die Variable »v«“
- Java
java.lang.System.out.println( v = 4 );
- auf deutsch:
- „Ausgabe des Wertes der Zuweisung von «4» an »v«“
Übungsfragen
? Wirkung einer Zuweisung
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
java.lang.System.out.println( v );
java.lang.System.out.println( v = 3 );
v = 4;
v = 7;
java.lang.System.out.println( v ); }}
? Wirkung einer Zuweisung (1) →→
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
java.lang.System.out.println( v );
v = 4;
java.lang.System.out.println( v ); }}
? Wirkung einer Zuweisung (2) →→
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
v = 4;
v = 7;
java.lang.System.out.println( v );
v = 9; }}
? Wirkung einer Zuweisung (3) →→
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
v = v * v;
java.lang.System.out.println( v = 0 ); }}
? Wirkung einer Zuweisung (4) →→
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
int w = 7;
v = w;
java.lang.System.out.println( v ); }}
? Wirkung einer Zuweisung (5) →→
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int v = 2;
int w = 7;
v = w + 2 * v + 1;
java.lang.System.out.println( v ); }}
? Wirkung einer Zuweisung (6)
Was gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ var v = java.lang.System.setProperty( "user.country", "IT" );
v = java.lang.System.setProperty( "user.country", "US" );
java.lang.System.out.println( java.lang.System.getProperty( "user.country" )); }}
Übungsaufgaben
/ Erhöhen
Schreiben Sie das folgende Programm so um, daß der Wert der Blockvariablen »i« durch eine Zuweisung um «7» erhöht wird (egal, welchen Wert die Variable »i« vorher hat).
- Dazu soll der zweite Kommentar durch Quelltext ersetzt werden. Er darf auch durch mehrere Zeilen ersetzt werden.
- Falls jener den zweiten Kommentar ersetzende Quelltext zweimal hintereinanderstehen würde, sollte er den Wert von »i« also dann um «14» erhöhen.
- Die ersten drei Zeilen und die letzte Zeile dürfen nicht verändert werden.
- Wie bei allen Übungsaufgaben sollten auch hier nur die bisher im Kurs vorgestellten Sprachelemente verwendet werden.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int i = 4; /* oder irgendein anderer Wert *//* ... */
java.lang.System.out.println( i ); }}
java.lang.System.out
4
Die Lösung soll den Wert auch dann um 7 erhöhen, wenn weiter oben das Numerale »4« durch ein anderes Numerale ersetzt werden würde, wie beispielsweise in dem folgenden Programm.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int i = 11; /* oder irgendein anderer Wert *//* ... */
java.lang.System.out.println( i ); }}
java.lang.System.out
11
/ Erhöhen (1) →→
Schreiben Sie das folgende Programm so um, daß der Wert der Blockvariablen »v« durch eine Zuweisung um 7 Prozent erhöht wird.
- Dazu soll der zweite Kommentar durch Quelltext ersetzt werden. Er darf auch durch mehrere Zeilen ersetzt werden.
- Falls jener den zweiten Kommentar ersetzende Quelltext zweimal hintereinanderstehen würde, sollte er den Wert von »v« also dann um »14.49« Prozent erhöhen.
- Die ersten drei Zeilen und die letzte Zeile dürfen nicht verändert werden.
- Wie bei allen Übungsaufgaben sollten auch hier nur die bisher im Kurs vorgestellten Sprachelemente verwendet werden.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ double v = 4; /* oder irgendein anderer Wert *//* ... */
java.lang.System.out.println( v ); }}
java.lang.System.out
4.0
Die Lösung soll den Wert auch dann um 7 Prozent erhöhen, wenn weiter oben das Numerale »4« durch ein anderes Numerale ersetzt werden würde, wie beispielsweise in dem folgenden Programm.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ double v = 11; /* oder irgendein anderer Wert *//* ... */
java.lang.System.out.println( v ); }}
java.lang.System.out
11.0
/ Vertauschen →
Schreiben Sie das folgende Programm so um, daß der Wert der Blockvariablen »x« an der Stelle des Kommentars mit dem Wert der Blockvariablen »y« vertauscht wird!
- Dazu soll der Kommentar durch Quelltext ersetzt werden.
- Falls jener den Kommentar ersetzende Quelltext zweimal hintereinanderstehen würde, sollten die Variablen dann also wieder ihre ursprünglichen Werte enthalten.
- Die ersten vier Zeilen und die letzten beiden Zeilen dürfen nicht verändert werden.
- Wie bei allen Übungsaufgaben sollten auch hier nur die bisher im Kurs vorgestellten Sprachelemente verwendet werden.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int x = 22; // oder irgendein anderer Wert
int y = 47; // oder irgendein anderer Wert/* ... */
java.lang.System.out.println( x );
java.lang.System.out.println( y ); }}java.lang.System.out
22
47
Wenn diese Aufgabe richtig bearbeitet wird, dann gibt das entstandene Programm also zuerst »47« und dann »22« aus.
Würde man allerdings anschließend das Numerale »22« und das Numerale »47« durch andere Numeralia ersetzen, so sollten dann diese neuen Werte vertauscht werden. Es sollen also die Werte der beiden Blockvariablen vertauscht werden, egal welche Werte dies nun sind. Deswegen darf die Lösung nicht nur für die hier als Beispiel festgelegten Werte das gewünschte Verhalten zeigen.
Anmerkung Diese Übungsaufgabe gehört zum roten Faden „Vertauschen“.
Hinweise zum Stil
Einige wichtige Stilregeln, die bei der Lösung dieser Aufgabe beachtet werden könnten, lauten:
ℛ Stilregel Der Name einer Variablen sollte ihre Bedeutung vermitteln.
ℛ Stilregel Der Gültigkeitsbereich eines Namens sollte so klein wie möglich sein.
(Quelle: Es gibt verschiedene Quellen zu dieser Regel, die für alle Programmiersprachen gilt. Beispielsweise das Kapitel “Minimize the scope ” im angesehenen Buch “Effective Java ” von Joshua Bloch.)
ℛ Stilregel Falls möglich, sollte »final« verwendet werden.
(Quelle: Es gibt verschiedene Quellen zu dieser Regel, die für alle Programmiersprachen gilt. Beispielsweise das Kapitel “Minimize mutability ” im angesehenen Buch “Effective Java ” von Joshua Bloch.)
ℛ Stilregel Ein Denkschritt kann als ein Block dargestellt werde, der mehrere zusammengehörige Schritte zu einer gedanklichen Einheit zusammenfaßt.