I hope this is not a stupid question. Why does this code print 0? public class test { public static void main(String[] args) { int i = 0; i = i++; i = i++; i = i++; System.out.println(i); } } David
William Brogden
Author and all-around good cowpoke
Rancher
Joined: Mar 22, 2000
Posts: 12265
1
posted
0
It has to do with the order in which expresions are evaluated. I believe it works out like this: 1. calculate where results go 2. get the value of the expression 3. increment i 4. store the value from 2 in the location from 1 (thus over-writing the incremented i) Bill
David, always remember that there is some difference between the postfix and prefix.in ur code there is postfix i.e. the value is incremented after it is being assigned to itself or to some other variable.had it been prefix (++i) the output would be 3. hope i have cleared ur doubt.
David Moore
Greenhorn
Joined: Oct 10, 2000
Posts: 8
posted
0
Bill, When you say in line 3 increment i, it does not happen because = is of higher presedence than ++, so the increment never happens because it's after i? David
Manfred Leonhardt
Ranch Hand
Joined: Jan 09, 2001
Posts: 1492
posted
0
Hi David, The ++ operator has much higher percedence than assignment(=). Bill's steps are correctly ordered. The increment happens before (step 3) the assignment (step 4). Think of the postfix as using a special Java 'holding' area. 1. Place current value of i into holding area (move zero to holding area) 2. Increment current value of i (i now becomes 1) 3. Assign value in holding area to i (i now assigned zero) Simple but effective, Manfred.