黑马程序员技术交流社区

标题: ++ 的疑惑 [打印本页]

作者: 三生石    时间: 2014-3-7 22:36
标题: ++ 的疑惑
例子1:
int a= 1;
a = a++;
System.out.println(a); // 等于1
例子2:
int a=5;
int m=(a++)+(a++);
System.out.println(a + ", " + m); // 等于7, 11
为什么?


作者: 房建斌    时间: 2014-3-7 23:06
a = 5;
int m=(a++)+(a++);
第一步 a++ = 5;  a = 6; ++在变量后面就是先返回当前值,然后本身再加1.
第二 a++ = 6 ; a = 7; 执行这里的时候a是6,所以先返回6,a才等于7的。
第三 m = 5 + 6 = 11; 最后的加法就是第一个括号返回值(5) + 第二个括号返回值(6)的结果 = 11了
a = 7;





作者: Sage    时间: 2014-3-7 23:10
首先,++在前,先运算再赋值;++在后,先赋值再运算。
例子1中,a初始值为1,a = a++;先将右边的a(1)赋值到左边的a那里,再自身+1,注意这里输出的是左边的a,所以a为1;
例子2中,a初始值为5,m = (a++) + (a++) ;按照算术规则,从左往右的小括号运算,第一个a++,将a(5)赋值给m,自身+1,此时m = 5, a = 6;再进行第二个a++,m +=(a++),将a(6)赋值并+原来的m(5),即m=11,而后a(6)自身+1,a=7。
注:例子2中的a++和a=a++是有区别的,要理会清除,不管是a++还是++a,都会执行一次自身+1,主要在于前者是先赋值,后者是先运算,多做点类似的题目就好理解了。
作者: 郝大龙0104    时间: 2014-3-7 23:14
例子1:
int a= 1;
a = a++;
System.out.println(a); // 等于1
a++  这是个式子  它的值是  1   运算完啦  a=2
例子2:
int a=5;
int m=(a++)+(a++);
System.out.println(a + ", " + m); // 等于7, 11
a++ 这个和上边的一样  这个式子值为 5  计算完啦  a=6   然后 后面的a++ 值为6  计算完啦 a=7

这两个例子的知识点就是:
++i  是先计算在赋值
i++  是先赋值在计算

作者: 何清林    时间: 2014-3-7 23:40
这两个例子我一个个解释:
例子1:
int a= 1;   
a = a++;    //把a=1先赋值给a再a++,结果a=1
System.out.println(a); // 等于1
例子2:
int a=5;
int m=(a++)+(a++);   //第一个a++ 等于、、先返回5,再+1;第二个a++等于、、先返回6,再+1——》a=7
System.out.println(a + ", " + m); // 所以等于7, 11
作者: 小脚印    时间: 2014-3-7 23:57
++ 为自加运算,当++在变量前时,先自加1然后再赋值给变量;
当++在后时,先赋值再自加
[code]
int a= 1;
a = a++;//运行过程为:a=a;a++(a=a+1=2)
System.out.println(a); // 等于1
例2 按这样分析就可以~~

作者: chenfc8578    时间: 2014-3-8 00:04
前自增:++x  自增变量先自增再参与表达式运算
int x = 1,y=1;
y=++x;
结果:x = 2,y = 2;

后自增:x++  自增变量先参与表达式运算再自增
int x=1,y=1;
y=x++;
结果:x = 2.y = 1;
作者: 戚兴海    时间: 2014-3-8 00:18
第二个好理解,第一个还真容易弄错
a=a++;
的确是先赋值,再自增的啊,赋值完了之后,再+1,怎么还是1呢。。。求具体解释,前后2个a不是同一个引用了?
作者: 一诺千金    时间: 2014-3-8 11:28
int m=(a++)+(a++);   从右往左好理解一点,+右边的a++是5,左边的是6




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