I'm new to java.
Just found out that in the expression,
y=x++
, y assumes the value of x and x becomes +1.
Forgive me if I sound stupid, but according to the order of precedence, assignment operators is at the end. So isn't x++ supposed to happen first followed by the assignment. Thanks in advance.

- 122,468
- 25
- 185
- 269

- 86
- 6
-
I have a feeling you are confused between y = x++; and y = ++x; – Stultuske Jun 12 '21 at 07:36
-
1Yes, but `++` and `--` are kind of special, [see here](https://stackoverflow.com/questions/2371118/how-do-the-post-increment-i-and-pre-increment-i-operators-work-in-java). That's why I suggest to use `++` and `--` only as standalone expression. – MC Emperor Jun 12 '21 at 07:40
-
2correct about precedence but [Documentation](https://docs.oracle.com/javase/specs/jls/se16/html/jls-15.html#jls-15.14.2-200): "... The value of the postfix increment expression is the value of the variable *before* the new value is stored. ,,," (The value being assigned is not the variable's one (that would kind of mean higher precedence of assignment) but the result of the post-increment **expression**, by definition, the variable value **before** incrementing) – Jun 12 '21 at 07:51
-
It's not about priority. The postincrement/postdecrement operators update the operand after its value has been taken, that's all. – user207421 Jun 12 '21 at 07:51
3 Answers
Q: So isn't
x++
supposed to happen first followed by the assignment.
A: Yes. And that is what happens. The statement y = x++;
is equivalent to the following:
temp = x; // | This is 'x++'
x = x + 1; // | (note that 'temp' contains the value of 'x++')
y = temp; // This is the assignment.
But as you see, the order of the operations (++
and =
) doesn't affect what the operations actually do.
And therefore ...
Q: How are
y=x++
andy=x--
different when the assignment operators has the least priority?
A: They aren't.

- 698,415
- 94
- 811
- 1,216
Operator precedence and evaluation order are two different concepts and they're not related.
If you have a() + b() * c()
, that doesn't mean that b()
and c()
get invoked first because *
has a higher precedence than +
. a()
still gets evaluated first. Evaluation order is typically left-to-right unless stated otherwise.
The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.
https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.7

- 30,799
- 15
- 56
- 79
y=x++
is assigning the value of x to y and then x gets incremented. The x++
operation is called a post-increment.
Here's some code that you can run for illustration:
int x = 0;
System.out.println("Illustration of post-increment");
System.out.println(x);
System.out.println(x++);
System.out.println(x);
int y = 0;
System.out.println("Illustration of pre-increment");
System.out.println(y);
System.out.println(++y);
System.out.println(y);

- 657
- 1
- 6
- 21