黑马程序员技术交流社区

标题: 新人求一道代码题解题思路。 [打印本页]

作者: everyuda520    时间: 2016-2-25 22:07
标题: 新人求一道代码题解题思路。
为什么 int a =1;
          a=a++;
  System.out.println(“a=”+a);
最后打印的是a=1,不能理解。
作者: huang_bing_hua    时间: 2016-2-25 22:51
++有两种使用场景
1.单独使用,n++和++n效果是一样的
2.参与运算 n++先参与运算,再进行自加运算;++n,先自加,再参与运算
3.本题中赋值运算也是运算的一种,所以n++先赋值,再自加,所以左边被赋值为1
作者: woaigm    时间: 2016-2-25 22:53
i= i++ 是一个特例 ,自增的结果不会赋值给i最后,保留的是原值
作者: Lily007    时间: 2016-2-26 16:34
i++先计算,再赋值
作者: 小米哥    时间: 2016-2-26 22:01
a++是先赋值再自增,++a是先自增再赋值
作者: zzh111    时间: 2016-2-26 22:27
a += 1;这个会加一并赋值。
作者: everyuda520    时间: 2016-2-28 15:15
赋值后 a = 1; a++ a就是二了,输出a还是1
作者: 798290456    时间: 2016-2-28 15:28
这个是要循环的吧,你写的是循环语句吗?
作者: everyuda520    时间: 2016-2-28 16:07
就是普通的顺序结构,
作者: 18103958222    时间: 2016-2-29 09:56
前边你理解的都不错,我是这样认为的:a++ 是在自加之前先返回出值,所以a=a++,a自加前是1,所以赋值后还是1 ,也就是说你经过a=a++运算后还是a=1,所以最后输出的字符串就是a=1

同样++a是在自加后返回值,你可以改成a=++a试一下
作者: 超人d咖啡也加糖    时间: 2016-2-29 11:44
everyuda520 发表于 2016-2-28 15:15
赋值后 a = 1; a++ a就是二了,输出a还是1

int a=1;a++;是先用a,再把a加1,此时是1
int a=1; ++a;  是先把a加1了,再拿去用,此时是2
(ps:三楼说的对)
作者: 小笼包    时间: 2016-3-2 23:17
我想他问的是赋值以后a++,此时并没有赋值,所以是无用的
作者: xiaotvsit    时间: 2016-3-2 23:23
先赋值后加1
作者: 小猪开    时间: 2016-3-3 01:09
++在a的后面,他会先把a的值赋值给在执行
作者: dmadboy    时间: 2016-3-3 12:16
http://blog.csdn.net/miderph84/article/details/3390166  解释的很详细,希望能帮到你
作者: skykiah    时间: 2016-3-3 18:37
看不懂呢
作者: 超人d咖啡也加糖    时间: 2016-3-3 19:38
超人d咖啡也加糖 发表于 2016-2-29 11:44
int a=1;a++;是先用a,再把a加1,此时是1
int a=1; ++a;  是先把a加1了,再拿去用,此时是2
(ps:三楼 ...

我又理解错了。。。。
作者: 陌城    时间: 2016-3-3 20:08
在java中,他会先把右边的变量放到一个内存地址中,然后自己+1,再然后把内存地址中的值赋给等号左边的变量。
如果是:
int b = 1;
int a = 1;
b=a++;
按照我上面说的先把a的值1存起来,然后a自身+1,再把那个存起来的值1赋给b,
结果是a=2,b=1。看起来效果就和先运算b=a这部分然后a再自加1一样
现在再看a=a++;你能明白了吗?
作者: 执剑人    时间: 2016-3-6 11:28
本帖最后由 执剑人 于 2016-3-6 11:29 编辑

首先你要清楚打印的a是哪个a?你这样理解就知道了!
int a = 1;
b = a ++;
这时b=1,a = 2
但是你打印的相当于b;
是吧?

作者: mimi5566    时间: 2016-3-6 17:35
本帖最后由 mimi5566 于 2016-3-6 17:38 编辑

楼主应该正确理解++a和a++的区别
首先 ++a是先将a的值增加一 然后赋值,而a++是先赋值后增加a的值比如说a=1; b=++a,那么首先++a语句已经将a的值增加了1,所以右边的表达式结果是2,所以b就是2
b=a++呢,首先进行赋值,那么右边的表达式为1,所以b的值为1,但是赋值完后a的值还要增加1,所以a的值编程2,也就是楼主所遇到的情况。

作者: If_091021    时间: 2016-3-6 19:48
a的初值是1,当运行到 a=a++时,因为=运算符是右结合,这时就是计算(a++),又因为(a++)这个整体,要用到a的值,是先取a的值,取出来之后再进行++运算,所以就把a=1这个值赋给了等号右边。如果是(++a)当运行到这里时需要用到a,这个整体是先将a的值加1,再将结果赋到右边
作者: luomoss    时间: 2016-3-8 21:57
a=a++无论多少次,a还是原来的值,只在java中是这样的,如果在C语音中输出就是2




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