JAVA 一个算法程序,求解!

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:49:46
这个程序是关于i++与++i的程序,我按照以前c语言里边学的,老师说这个算法和c语言里边的是一样的,胆识我的结果却跟我算的,确切点说是跟很多人算的都不一样!请高手解答!不要说结果,结果我知道,我只是想知道为什么y是93,我算的应该是94才对的!程序如下:
int x=20;
int y=35;
x = y++ + x++;
y = ++y + ++x;

System.out.println(x);
System.out.println(y);
同志们说的都很有道理,但是我的思路是这样的在,不知道在java里能正确不,这个思路是c的思路不知道在java里能行得通不:
这里我们再来看试题。一开始是x=35+20=55,然后是执行x++,结果x=56;再执行y++,结果y=36。后来是先++x,结果x=57,再后来是++y,结果y=37,最后执行y=37+57=94。
我在机器上试了,确实是93,但是我就是想不明白这到底是啥j8问题,我这思路我觉得也正确呢?

第1步
x = y++ + x++;
//因为++在后面,所以他们先做的+运算,然后在做++;也就是说 先把y+x的值保存在一个临时变量中,然后分别做++运算,最后在把临时变量的值赋给x
因此这一步结束的时候 y=y++=36,而x虽然做过++,但最后有个赋值运算,所以x=x+y=55.(是x,y没做++运算的时候就已经算出来55保存到临时变量,当x,y做完++运算后在把值赋给x的)
最终结果:
x=55,y=36

第2步
y = ++y + ++x;
//++在前面,先做++运算然后再做+运算,所以++y=37,++x=56
,然后做+运算,37+56=93,赋值给y.
所以 y=93
-------------
你理解错了。
第一步 x+y并不是直接赋给x的,因为赋值是级别最低的,他最后才执行,也就是说, 当x和y 都++完了后才执行的赋值. 所以是55而非56

public class a
{
public static void main(String args[])
{
int x=20;
int y=35;
x=y++ + x++; //x=y+x=35+20=55,y=y+1=36 后面的x++其实没起作用
//System.out.println(x); 加了句这里 x =55
y=++y + ++x; //y=(y+1)+(x+1)=37+56=93

System.out.println(x);
System.out.println(y);
}
}

首先我教会你一个思想~~~
x=0;
x=x++;
x是多少,你是不是觉得是1,我告诉你是0,为什么?
第一步读取右边x地址,
第二步读左边x地址,(编译器不认为左右地址一样,这里面又有一个效率简化问题,x+=1比x=x+1效率快,有兴趣知道为什么一会再说)
第三步左x值等于右x,然后右x加一。