Nein, sie entsprechen NICHT der Art, wie Sie sie ausgedrückt haben.
%Vor% Das Problem mit der dritten Zeile ist, dass -
eine so genannte "numerische Promotion" ausführt ( JLS 5.6 ) der Operanden short
und ergibt einen int
-Wert, der nicht ohne weiteres einem short
zugewiesen werden kann. Zusammengesetzte Zuweisungsoperatoren enthalten eine verborgene Besetzung!
Die genaue Äquivalenz ist in JLS 15.26.2 Compound Assignment festgelegt Betreiber :
Ein zusammengesetzter Zuweisungsausdruck der Form E1 op = E2 ist äquivalent zu E1 = (T) ((E1) op (E2)) , wobei gilt T ist der Typ von E1 , außer dass E1 nur einmal ausgewertet wird.
Um einige der Feinheiten zu verdeutlichen:
int x = 5; x *= 2 + 1; // x == 15, not 11
int i = 0; i += 3.14159; // this compiles fine!
arr[i++] += 5; // this only increments i once
Java hat auch *=
, /=
, %=
, +=
, -=
, <<=
, >>=
, >>>=
, &=
, ^=
und |=
. Die letzten 3 sind auch für boolesche Werte definiert ( JLS 15.22.2 Boolean Logical Operators ).
Nicht genau. Der Grund für die Einführung in C war, dass der Programmierer einige Optimierungen durchführen konnte, die der Compiler nicht konnte. Zum Beispiel:
%Vor%wurde früher viel besser kompiliert als
%Vor%von den Compilern der Zeit.
Und wenn "x" Nebenwirkungen hat, z.B. "x ++", dann ist das völlig anders.
Tags und Links java variable-assignment compound-operator