aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Assigning and Post incrementing: Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Assigning and Post incrementing:" Watch "Assigning and Post incrementing:" New topic
Author

Assigning and Post incrementing:

Narasimha Rao B.
Ranch Hand

Joined: Aug 26, 2002
Posts: 205
Hi,
Please clarify me, whether the below understanding of mine is correct or not?
int k = 3;
for(int i=0;i<5;i++){
System.out.println(k=k++)}
Above print statement will always print 3 and k value will not be incremented.
Reason is,
Initially k value is 3 and will be assigned to k, then k value will be incremented temporarily by one, i.e., now temporary k value is 4 and now I am not assigning the temporary value of k to any thing, hence it will lost and now the actual k value is 3, which I assigned before incrementing. Is this understanding is correct or not? If it is wrong what is actual logic behind this?
Thanks in Advance,
Narasimha.


Narasimha
Vicken Karaoghlanian
Ranch Hand

Joined: Jul 21, 2003
Posts: 522
Forget the loop and let us focus on
int k = 3;
k = k++;
The JLS states that "The post increment operator returns its old value then increment the result"
Knowing this fact you can easily understand what happens:
  • 'k' is initialized to the value of 3
  • 'k++' is executed, thus k becomes 4 but it returns its old value which is 3
  • 3 is assigned to 'k'


  • Remember that the increment operator has a higher priority over the assignment; therefore it is executed first (not the other way around as you suggested).
    [ February 07, 2004: Message edited by: Vicken Karaoghlanian ]

    - Do not try and bend the spoon. That's impossible. Instead, only try to realize the truth. <br />- What truth? <br />- That there is no spoon!!!
    Davy Kelly
    Ranch Hand

    Joined: Jan 12, 2004
    Posts: 384
    hey narasimha,
    I like to look at it in a similar fashion but with a slightly different method.
    int k = 3;
    k = k++; //k is assigned to 3 here
    //but would be 4 here. because you have exited the loop, it does not get to be 4!
    so every time you see k = k++;in your example it is saying, k = 3
    Davy


    How simple does it have to be???
    Vicken Karaoghlanian
    Ranch Hand

    Joined: Jul 21, 2003
    Posts: 522
    Originally posted by Davy Kelly:
    hey narasimha,
    I like to look at it in a similar fashion but with a slightly different method.
    int k = 3;
    k = k++; //k is assigned to 3 here
    //but would be 4 here. because you have exited the loop, it does not get to be 4!
    so every time you see k = k++;in your example it is saying, k = 3
    Davy


    Davy, always remember the fact that the increment operator has a higher priority over the assignment; therefore it is executed first.
    How do you think the following expression is evaluated, and what is it output?
    int k = 0;
    k = k++ + ++k + k++;
    Don't ask the compiler for the answer, try doing it yourself.

    And by the way...

    I no my spelling is carp!!!

    I speaking english very best too.
    [ February 07, 2004: Message edited by: Vicken Karaoghlanian ]
    Davy Kelly
    Ranch Hand

    Joined: Jan 12, 2004
    Posts: 384
    Vicken,

    int k = 0;
    k = k++ + ++k + k++;

    as I see it is :
    k++ is 0 (at the moment add 1 at end of statement)
    +
    ++k is 1
    +
    k++ is 1 (because of last preincrement ++k but add 1 at end of statement)
    so k = 2 (but have to add another 2 because we at end of statement.
    k = 4
    Can I compile it now to see if I am correct???
    Davy
    Vicken Karaoghlanian
    Ranch Hand

    Joined: Jul 21, 2003
    Posts: 522
    Davy, your output is correct, but you missed the evaluation order with a big time.
    Here is what really happens:
  • The expression is evaluated from left-to-right
  • 'k++' increment k (Which is zero) thus becoming 1, but returning 0
  • '++k' increment k (Which is one) then returning 2
  • 'k++' increment k (which is two) thus becoming 3, but returning 2
  • The final order of the evaluation is : 0 + 2 + 2
  • Finally 4 is assigned to k


  • Not actually what you had in mind, right? Nice try though.
    Davy Kelly
    Ranch Hand

    Joined: Jan 12, 2004
    Posts: 384
    thank you for correcting me,
    so what your saying is, that when the k++ happens, it increments the value k, after the next +, so therefore it increments before the end of the statement!
    Davy.
    P.s. I will test this out, the wy you look at it, and the way i look at it, to see if i get consistantly same or different output.
    Davy Kelly
    Ranch Hand

    Joined: Jan 12, 2004
    Posts: 384
    hey Vicken,
    cheers, for correcting me, just done a wee program, to see how you looked at it, this is what I done;

    7 different increments in the same line, this is how i looked at it in a linear way from left to right.
    k = 0
    k++ = 0 (but increment to one after)
    ++k = 2 (used the last increment and the preincrement)
    ++k = 3 (preincrement)
    k++ = 3 (post increment, gets value 3 then adds 1 later)
    k++ = 4 (post increment, gets value 3 then adds 1 later)
    ++k = 6 (used the last increment and the preincrement)
    k++ = 6 (post increment, gets value 3 then adds 1 later but does not really get added)
    so the value k = 0 + 2 + 3 + 3 + 4 + 6 + 6 which is
    24
    I think i get it better now, correct me if I am wrong, but this week has been hell, I am soo tired I can't think straight
    Davy
    Vicken Karaoghlanian
    Ranch Hand

    Joined: Jul 21, 2003
    Posts: 522
    Congratulations!!! You hit the jackpot.
    To simplify things even more.
  • Preincrement operator : increment then return value.
  • Postincrement operator: return value then increment.


  • Your week being hell!!! You should see mine, I have my exam set next week, I haven't slept for... let me see two weeks maybe. I arrive late to my work place almost every morning, my boss is this close to fire me.
    It is really hard to study and work at the same time.
    Davy Kelly
    Ranch Hand

    Joined: Jan 12, 2004
    Posts: 384
    Vicken,
    I read you loud and clear mate, I too have my exam next monday, and I have an interview to prepare for for this wednesday for promotions in the work (nothing to do with IT) and I am working full time 7 days a week. but at least i get a few days off after the 7.
    Good luck with your exam, mate
    Davy
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: Assigning and Post incrementing: