黑马程序员技术交流社区

标题: 代码问题求解???? [打印本页]

作者: 734890702    时间: 2015-9-28 22:22
标题: 代码问题求解????
代码问题,求各路大神详细解释???
  1.                                int a = 3;
  2.                                 int x = 0;
  3.                                 x = a++;
  4.                                 x = a++;
  5.                                 x = a++;
  6.                                 System.out.println("x = "+x);
  7.                                
  8.                                 x = x++;
  9.                                 x = x++;
  10.                                 x = x++;
  11.                                 System.out.println("x = "+x);
复制代码
我怎么觉得是结果是:5    8,计算机运行是5    5      。。。。。。。。。。。。。求解!!!!!!!



作者: miao1991    时间: 2015-9-28 22:22
                                int a = 3;
                                int x = 0;
                                x = a++;//a=4,  x=3
                                x = a++;//a=5, x=4
                                x = a++;//x=5,a = 6
                                System.out.println("x = "+x);
                               
                                x = x++;//x=5
                                x = x++;
                                x = x++;
                                System.out.println("x = "+x);
有几个点,你可能没理解透彻:x = a++;(里面有两个运算符++和=,但是++的优先级要高于=)
(1)是将(a++)表达式的值赋值给变量x,而不是将a的值赋值给变量x,所以我们要先计算a++表达式的值,由于++符号在a的后面,所以先使用a的值作为表达式的值,所以a++表达式的值是3
(2)进行++运算,a=a+1,a变成4,但是不管a的值变为了多少,都不会影响第(1)步中的表达式a++的值(3)
(3)进行赋值运算,将a++表达式的值(第一步已经算出来了3)赋值给x,x变为3。
希望我这个解释,对你有用!!!!
作者: 小黑头    时间: 2015-9-28 23:03
++在前先自增再参加其他运算,++在后先其他运算后自增
作者: JYcainiao    时间: 2015-9-28 23:23
miao1991 发表于 2015-9-28 22:22
int a = 3;
                                int x = 0;
                                x = a  ;//a=4,  x=3

x = x++;//x=5  
x = x++;//x=?
  x = x++;//x=?
求解答?
作者: JYcainiao    时间: 2015-9-28 23:24
懂了,是我迷惑了,
作者: tianweidong    时间: 2015-9-29 17:53
x=x++;没有进行++运算么?
作者: Windnon    时间: 2015-9-30 23:11
因为x这个时候已经变成了5,然后在加加就是8了,依然看不懂啊~
作者: toypaoa    时间: 2015-9-30 23:36
因为x=x++;这中间有个temp变量先存储5,然后x自增变为6,最后将temp的5赋值给x。这是因为++的优先度高于=号,x的变化过程是5->6->5.
作者: miao1991    时间: 2015-10-2 19:43
JYcainiao 发表于 2015-9-28 23:23
x = x++;//x=5  
x = x++;//x=?
  x = x++;//x=?

x = x++;   //x=5  
x = x++;     //x=5
  x = x++;    //x=5
x的值先自增为x=6,让后(x++)这个表达式的值为5,之后赋值等号左边的x,把x=6,给覆盖了
作者: JYcainiao    时间: 2015-10-3 19:43
miao1991 发表于 2015-10-2 19:43
x = x++;   //x=5  
x = x++;     //x=5
  x = x++;    //x=5

懂了  意思是
X=X++   X++先运算,结果X为6,但是X++值赋给X,结果为5,把上一步的赋值给覆盖了 对吧?
作者: miao1991    时间: 2015-10-3 22:10
JYcainiao 发表于 2015-10-3 19:43
懂了  意思是
X=X++   X++先运算,结果X为6,但是X++值赋给X,结果为5,把上一步的赋值给覆盖了 对吧? ...

是的,right
作者: JYcainiao    时间: 2015-10-4 08:24
miao1991 发表于 2015-10-3 22:10
是的,right

谢啦   我弄迷糊了   把X=X++分开来看了,忘记还有个赋值符号了
作者: lxg8136223    时间: 2015-12-18 20:08
x=a++表示的是将a赋值给x,然后再自加,所以int a=3,int x=0,x=a++,是先把a赋值给x,因此x=3,a再自加为4.依次类推,第一次打印的是5,x=x++,将x=5赋值给左边后x在自加x=6,依次类推x=8。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2