Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #9002

Re: A freshman's question

From Lew <lewbloch@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: A freshman's question
Date 2011-10-19 09:58 -0700
Organization http://groups.google.com
Message-ID <17976081.108.1319043493265.JavaMail.geo-discussion-forums@yqjh13> (permalink)
References <3242b80f-ee51-45f0-9e12-231482f61a97@r2g2000prh.googlegroups.com> <37KdnWZAYfIR1QPTnZ2dnUVZ_vWdnZ2d@earthlink.com> <02a66b06-651a-46c8-9a09-64442a73a959@s17g2000prm.googlegroups.com> <F4mdnVWUC_HXFQPTnZ2dnUVZ_oednZ2d@earthlink.com> <4df1e05a-295c-4c60-9baf-0e69cd4ee507@r2g2000prh.googlegroups.com>

Show all headers | View raw


whl wrote:
> Patricia Shanahan wrote:
>> whl wrote:
>>> Patricia Shanahan wrote:
>> >> whl wrote:
>>>>> ======start=========
>>>>>        public class Inc{
>>>>> public static void main(String argv[]){
>>>>>                 Inc inc = new Inc();
>>>>>                 int i =0;
>>>>>                 inc.fermin(i);
>>>>>                 i = i++;
>>>>>                 System.out.println(i);
>>>>>         }
>>>>>         void fermin(int i){
>>>>>                 i++;
>>>>>         }
>>>>> }
>>>>> ========end========
>>>>> I think the result is 1,but the real result is 0. I don't kown the
>>>>> statement i=i++ operation sequence.  In my opinion , variable i's
>>>>> values is 0,then i++ ,the variable i's values is 1. They share a
>>>>> common memory space,the variable i should change the values.

>>>> The i=i++ operation sequence is:
>>>>
>>>> 1. Evaluate i++. It has the side effect of incrementing i to 1, but has
>>>> as result the old value of i, 0.
>>>>
>>>> 2. Do the assignment. This sets the left hand side, i, equal to the
>>>> result of the right hand side, 0.
>>>>
>>>> In theory, i does change to 1, but immediately changes back to 0. In
>>>> practice, the change in i's value might get optimized out. The effect of
>>>> i=i++ is to leave i unchanged.
>>>
>>> so ,thank you for you answer my question ,I just don't know the
>>> variable i is share the common memory space and when the left hand
>>> side ,i ,equal to the result of the right hand side ,0,then ,i
>>> increase to 1,so ,in the memory ,the variable i's value should be 1.if
>>> change the expression i=i++ to i++,the result is 1.
>>
>> Look again at what I wrote.
>>
>> During step 1, at least in theory, i changes from 0 to 1. If the entire
>> statement is "i++;" that is the value of i for later statements. The 0
>> result of evaluating i++ is not used.
>>
>> In the original case, step 2 makes i equal to the value of the right
>> hand side, 0, and that is the value of i for later statements.
> 
> Thank you for your explanation in patience, maybe my English is very
> terrible,I don't understand all of your meaning. your meaning is when
> the variable i on the right hand side is assigned 0,then ,the
> statement "i++" don't execute,and start print?

No.

The "i++" *does* execute.  ("print" has nothing to do with this yet.)

What is the value of 'i++'?

Let's just look at two lines of code.

int i = 0;
int x = i++;

What is the value of 'x' after its initialization?

Zero!

Why?

Because the value of a post-increment expression - that means the '++' is to the right of the variable - is the value of the variable before the increment.

This is very, very basic.

The value of post-increment (and of post-decrement) is the variable's value *before* the operation.

Before.

Not after.

The pre-increment version, where the operator is to the left of the variable, is the value after the increment.

So in this snippet:

int i = 0, j = 0;
int x = i++;
int y = ++j;

the value of 'x' will become zero, and the value of 'y' will become one.

-- 
Lew

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-18 20:08 -0700
  Re: A freshman's question Patricia Shanahan <pats@acm.org> - 2011-10-19 04:48 +0100
    Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-19 00:54 -0700
      Re: A freshman's question Patricia Shanahan <pats@acm.org> - 2011-10-19 09:20 +0100
        Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-19 03:38 -0700
          Re: A freshman's question Lars Enderin <lars.enderin@telia.com> - 2011-10-19 17:48 +0200
            Re: A freshman's question Tim Slattery <Slattery_T@bls.gov> - 2011-10-19 12:24 -0400
              Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-20 03:55 -0700
            Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-20 03:50 -0700
          Re: A freshman's question Lew <lewbloch@gmail.com> - 2011-10-19 09:58 -0700
            Re: A freshman's question Patricia Shanahan <pats@acm.org> - 2011-10-19 18:47 +0100
            Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-20 03:48 -0700
        Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-19 03:49 -0700
          Re: A freshman's question Patricia Shanahan <pats@acm.org> - 2011-10-19 18:58 +0100
            Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-20 02:13 -0700
      Re: A freshman's question Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-10-19 06:05 -0300
        Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-19 03:38 -0700
    Re: A freshman's question Travers Naran <tnaran@gmail.com> - 2011-10-20 07:30 -0700
      Re: A freshman's question Gene Wirchenko <genew@ocis.net> - 2011-10-20 10:08 -0700
        Re: A freshman's question Patricia Shanahan <pats@acm.org> - 2011-10-20 18:22 +0100
        Re: A freshman's question Lew <lewbloch@gmail.com> - 2011-10-20 13:59 -0700
        Re: A freshman's question Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-10-20 17:38 -0500
  Re: A freshman's question Roedy Green <see_website@mindprod.com.invalid> - 2011-10-19 23:56 -0700
    Re: A freshman's question whl <wanghailunmail@gmail.com> - 2011-10-20 03:55 -0700

csiph-web