Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.42!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder1-1.proxad.net!198.186.194.247.MISMATCH!news-out.readnews.com!transit3.readnews.com!postnews.google.com!u10g2000prl.googlegroups.com!not-for-mail From: whl Newsgroups: comp.lang.java.programmer Subject: Re: A freshman's question Date: Thu, 20 Oct 2011 03:48:01 -0700 (PDT) Organization: http://groups.google.com Lines: 107 Message-ID: References: <3242b80f-ee51-45f0-9e12-231482f61a97@r2g2000prh.googlegroups.com> <37KdnWZAYfIR1QPTnZ2dnUVZ_vWdnZ2d@earthlink.com> <02a66b06-651a-46c8-9a09-64442a73a959@s17g2000prm.googlegroups.com> <4df1e05a-295c-4c60-9baf-0e69cd4ee507@r2g2000prh.googlegroups.com> <17976081.108.1319043493265.JavaMail.geo-discussion-forums@yqjh13> NNTP-Posting-Host: 210.30.49.103 Mime-Version: 1.0 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1319108125 25633 127.0.0.1 (20 Oct 2011 10:55:25 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 20 Oct 2011 10:55:25 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: u10g2000prl.googlegroups.com; posting-host=210.30.49.103; posting-account=HTLLjQoAAACz0TvVcFSbbOMA5uM_lEjQ User-Agent: G2/1.0 X-Google-Web-Client: true X-Google-Header-Order: HNKRUAELSC X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.218 Safari/535.1,gzip(gfe) Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:9020 On 10=D4=C220=C8=D5, =C9=CF=CE=E712=CA=B158=B7=D6, Lew = wrote: > whl wrote: > > Patricia Shanahan wrote: > >> whl wrote: > >>> Patricia Shanahan wrote: > >> >> whl wrote: > >>>>> =3D=3D=3D=3D=3D=3Dstart=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>> public class Inc{ > >>>>> public static void main(String argv[]){ > >>>>> Inc inc =3D new Inc(); > >>>>> int i =3D0; > >>>>> inc.fermin(i); > >>>>> i =3D i++; > >>>>> System.out.println(i); > >>>>> } > >>>>> void fermin(int i){ > >>>>> i++; > >>>>> } > >>>>> } > >>>>> =3D=3D=3D=3D=3D=3D=3D=3Dend=3D=3D=3D=3D=3D=3D=3D=3D > >>>>> I think the result is 1,but the real result is 0. I don't kown the > >>>>> statement i=3Di++ 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=3Di++ 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 effec= t of > >>>> i=3Di++ 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.i= f > >>> change the expression i=3Di++ 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 entir= e > >> 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 =3D 0; > int x =3D 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 inc= rement. > > This is very, very basic. > > The value of post-increment (and of post-decrement) is the variable's val= ue *before* the operation. > > Before. > > Not after. > > The pre-increment version, where the operator is to the left of the varia= ble, is the value after the increment. > > So in this snippet: > > int i =3D 0, j =3D 0; > int x =3D i++; > int y =3D ++j; > > the value of 'x' will become zero, and the value of 'y' will become one. > > -- > Lew thank you ,now ,I think this is a very simple question,I understand all of your answer,maybe I put this complicated matters!