Question

The code:

int r=1;
System.out.println(r + (r=2));

The output is: 3. But I expected 4 because I thought the code inside the parentheses is executed first?

Was it helpful?

Solution 2

Official Docs on Operators says

All binary operators except for the assignment operators are evaluated from left to right; assignment operators are evaluated right to left.

So + is evaluated left-to-right,where as assignment operators are evaluated right to left.

OTHER TIPS

Use this if you want 4

int r=1;
System.out.println((r=2) + r); // execute + is left-to-right

Associativity of + is left-to-right , and the value of the expression (r=2) is 2.

Refer JLS 15.7

The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.

If the operator is a compound-assignment operator (§15.26.2), then evaluation of the left-hand operand includes both remembering the variable that the left-hand operand denotes and fetching and saving that variable's value for use in the implied binary operation.

If evaluation of the left-hand operand of a binary operator completes abruptly, no part of the right-hand operand appears to have been evaluated.

it's like this

(r + (r=2))
(1 + (r=2))
(1 + (2))
(3)

The value of statement r=2 is 2. Nested expressions between brackets are processed first though.

For instance:

int r=2;
System.out.println(r * (r=2 + 1));

Output:

6

Why? Because r = 2 + 1 returns 3.

Same as:

int r=2;
System.out.println(r * (2 + 1));

Output still 6 because (2 + 1) is evaluated before multiplication.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top