Java executes arithmetic Expression wrong? -
i don`t understand how java progressing arithmetic expression
int x = 1; int y = 1; x += y += x += y; system.out.println("x=" + x + " y=" + y); with java x = 4 , y = 3. in c, perl, php x=5 , y = 3 on paper x = 5 , y = 3
this nasty part, obviously:
x += y += x += y; this executed as:
int originalx = x; // used later x = x + y; // right-most x += y y = y + x; // result of "x += y" value stored in x x = originalx + y; // result of "y += x" value stored in y so:
x y (start) 1 1 x = x + y 2 1 y = y + x 2 3 x = originalx + y 4 3 the important part use of originalx here. compound assignment treated as:
x = x + y and first operand of + evaluated before second operand... why takes original value of x, not "latest" one.
from jls section 15.16.2:
if left-hand operand expression not array access expression, then:
first, left-hand operand evaluated produce variable. if evaluation completes abruptly, assignment expression completes abruptly same reason; right-hand operand not evaluated , no assignment occurs.
otherwise, value of left-hand operand saved , right-hand operand evaluated. if evaluation completes abruptly, assignment expression completes abruptly same reason , no assignment occurs.
when in doubt, consult language specification - , never assume because 2 languages behave differently, 1 of them "wrong". long actual behaviour matches specified behaviour each language, - mean need understand behaviour of each language work with, of course.
that said, should avoid horrible code in first place.
Comments
Post a Comment