Weitere Grundlegendende Programmierkonzepte in Java
Operatoren
Als nächstes wollen wir uns die vielen Möglichkeiten anschauen, die uns die Operatoren in Java zur Verfügung stellen. Operatoren verbinden ein oder zwei Aussagen zu einer neuen. Dabei ist genau definiert, welcher Operator welches Ergebnis liefern muss. Es ist aber auch definiert, welche Datentypen er als Eingabe akzeptiert.
= (Wertzuweisungsoperator)
+ (Additionsoperator)
Der Additionsoperator addiert zwei Zahlen miteinander und gibt das Ergebnis zurück.Es ist nicht erforderlich, dass die beiden Zahlen vom selben Typ sind. Der Rückgabetyp ist immer so klein wie möglich aber so groß wie nötig.
Einige Beispiele:
int + int = int
int + long = long
int + float = float
int + double = double
long + float = float
long + double = double
float + double = double
Wir hatten bereits für den Typ String gelernt, dass der Additionsoperator als Konkatenation verstanden wird also als Aneinanderreihen der Strings. Das selbe geschieht, wenn man ein String mit einer Zahl “addiert” System.out.println("Es gibt " + 8 + " Planeten in unserem Sonnensystem.");.
- (Subtraktionsoperator)
Der Subtraktionsoperator subtrahiert die zweite Eingabezahl von der Ersten und gibt das Ergebnis zurück.Für den Rückgabetyp gelten die selben Bedingungen wie bei der Addition.
* (Multiplikationsoperator)
Der Multiplikationsoperator multipliziert zwei Zahlen und gibt das Ergebnis zurück.Für den Rückgabetyp gelten die selben Bedingungen wie bei der Addition.
/ (Divisionsoperator)
Der Divisionsoperator teilt die erste Eingabezahl durch die Zweite und gibt das Ergebnis zurück.
Für den Rückgabetyp gelten die selben Bedingungen wie bei der Addition. Man muss aber wissen, dass im Falle eines ganzzahligen Ergebnistyps die Stellen hinter dem Komma einfach verworfen werden. Beispielsweise ergibt int i = 3 / 2; das Ergebnis i = 1.
Die Division durch 0 ist wie in der Mathematik üblich nicht möglich. Das Programm stürzt mit einem Fehler ab. Dies gilt zumindest für die int 0 und die long 0. Eine Division durch double oder float 0.0 ergibt Unendlich, was als int ausgedrückt 2^31-1 ist.
% (Modulooperator)
Durch die Verwendung von Modulo erhalten wir den ganzzahligen Rest einer Division. Zum Beispiel ergibt int i = 3 / 2; das Ergebnis i = 1;.
Für den Rückgabetyp gelten die selben Bedingungen wie bei der Addition.
Vergleichsoperatoren
Scanner scanner = new Scanner(System.in); String a = "."; String b = a; String c = "."; String d = scanner.next(); // Wir geben nur einen . ein und drücken Enter. System.out.println(a == b); // ergibt true // Da wir b = a gesetzt haben, handelt es sich um den selben Speicher. System.out.println(a == c); // ergibt true // Der Compiler hat festgestellt, dass beide Strings gleich aussehen und lässt beide Variablen auf den selben Speicher zeigen. System.out.println(a == d); // ergibt false // Der Compiler hat einen neuen Speicherbereich vorgesehen, da er nicht wusste was eingegeben wird.
Für den Programmierer ist es oftmals nicht ersichtlich, welche Optimierungen der Compiler vornehmen wird und es ist für ihn meistens auch irrelevant. Wichtig ist, dass man den Operator nur einsetzt, wenn man weiß was er wirklich vergleicht und im Zweifel lieber die .equals()-Methode verwendet, welche meistens die erwarteten Ergebnisse bringt. Als dritte Gruppe wollen wir uns noch einmal die boolschen Operatoren anschauen.
! (Verneinungsoperator)
Durch eine Verneinung wird eine Wahrheitsaussage in das Gegenteil verwandelt.
&& (logisches Und)
Durch das logische Und werden zwei Wahrheitsaussagen verbunden. Nur, wenn beide der Aussagen wahr sind, ist das Ergebnis wahr.
|| (logisches Oder)
Das logische Oder liefert als Ergebnis wahr, wenn mindestens eine der zwei Wahrheitsaussagen wahr ist.
System.out.println( 2 + 3 * 4 ); // Ergebnis 14 System.out.println( (2 + 3) * 4 ); // Ergebnis 24