Search code examples
javascjpocpjp

Post and Pre increment operators


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


Solution

  •  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 :