When i run the following example i get the output 0,2,1
class ZiggyTest2{
static int f1(int i) {
System.out.print(i + ",");
return 0;
}
public static void main(String[] args) {
int i = 0;
int j = 0;
j = i++; //After this statement j=0 i=1
j = j + f1(j); //After this statement j=0 i=1
i = i++ + f1(i); //i++ means i is now 2. The call f1(2) prints 2 but returns 0 so i=2 and j=0
System.out.println(i); //prints 2?
}
}
I don't understand why the output is 0,2,1 and not 0,2,2
i = i++ + f1(i);
i++
means i
is now 2
. The call f1(i)
prints 2
but returns 0 so i=2
and j=0
before this i = 1
, now imagine f1()
called and replaced with 0
so
i = i++ + 0;
now it would be
i = 1 + 0 // then it will increment i to 2 and then (1 +0) would be assigned back to `i`
In Simpler words (from here @ Piotr )
"i = i++" roughly translates to
int oldValue = i;
i = i + 1;
i = oldValue;
Another such Example :