Arithmetische Operationen und deren Auswertereihenfolge

Mit den in Variablen gespeicherten Daten können wir nun – je nach Art des Datentyps – verschiedene Operationen ausführen.

In diesem Beitrag möchte ich auf arithmetische Operationen in Java eingehen, diese sollten aus der Schulmathematik bereits bekannt sein.

Übersicht arithmetischer Operatoren

OperatorBedeutungBeispiel
+Addition3 + 5
Subtraktion7 – 4
*Multiplikation2 * 8
/Division4 / 2
%Modulo ( Division mit Rest)5 % 2
Übersicht arithmetischer Operatoren in Java mit Beispiel

Wir wollen nun die in der Tabelle aufgeführten Operationen in Java durchführen und uns die Ergebnisse ausgeben lassen. Für alle Variablen verwenden wir den Datentyp Integer.

public class meineErstesProgramm {

    public static void main(String[] args) {

        // Variable deklarieren und Wert zuweisen
        int addition = 3 + 5;
        int subtraktion = 7 - 4;
        int multiplikation = 2 * 8;
        int division = 4 / 2;
        int modulo = 5 % 2;

        // Werte ausgeben
        System.out.println("Wert von addition: " + addition);
        System.out.println("Wert von subtraktion: " + subtraktion);
        System.out.println("Wert von multiplikation: " + multiplikation);
        System.out.println("Wert von division: " + division);
        System.out.println("Wert von modulo: " + modulo);
    }

}
Wert von addition: 8
Wert von subtraktion: 3
Wert von multiplikation: 16
Wert von division: 2
Wert von modulo: 1

Wie verhält sich die Ausgabe, wenn wir 5 / 2 auf dem Datentyp Integer rechnen?

public class meineErstesProgramm {

    public static void main(String[] args) {

        // Was ist 5 / 2 ?
        System.out.println(5 / 2);
        
    }

}
2

Warum ist das so? Wir würden doch 2.5 erwarten?!

Das Ergebnis einer Ganzzahldivision wird in Java immer automatisch als Ganzzahl gespeichert. Hierbei schneidet Java die Stellen nach dem Komma einfach ab, es erfolgt keine Rundung. Folgend führen wir eine Gleitkommadivision durch:

public class meineErstesProgramm {

    public static void main(String[] args) {

        // Was ist 5.0 / 2.0 ?
        System.out.println(5.0 / 2.0);

    }

}
2.5

Auswertereihenfolge der Operatoren

Die Auswertung erfolgt in einer fest definierten Reihenfolge, hierzu wird jedem Operator eine sogenannte Bindung zugewiesen. Entsprechend der Regel „Punkt vor Strich“ besitzt der Multiplikationsoperator (*) eine höhere Bindung als zum Beispiel der Additionsoperator (+).

public class meineErstesProgramm {

    public static void main(String[] args) {

        // Beispiel zu Bindung und Auswertereihenfolge
        // Zu lesen als: (5*2)+(3*7) = 10 + 21 = 31
        System.out.println(5*2 + 3*7);

    }

}
31

Java-Ausdrücke werden nach folgenden Regeln ausgewertet:

  • Operanden werden von links nach rechts ausgewertet.
  • Die Operanden eines Operators werden vor dem Operator ausgewertet.
  • Operatoren werden nach der Bindung des Operators bewertet
  • Argumentlisten werden von links nach rechts ausgewertet.
OperatorsPrecedence
postfixexpr++ expr--
unary++expr --expr +expr -expr ~ !
multiplicative* / %
additive+ -
shift<< >> >>>
relational< > <= >= instanceof
equality== !=
bitwise AND&
bitwise exclusive OR^
bitwise inclusive OR|
logical AND&&
logical OR||
ternary? :
assignment= += -= *= /= %= &= ^= |= <<= >>= >>>=
Quelle: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html#nutsandbolts-precedence

Weitere Details können in der JLS (The Java® Language Specification) 15.7. Evaluation Order nachgelesen werden.

Dieser Beitrag hat einen Kommentar

Schreibe einen Kommentar