A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么 int a =1;
          a=a++;
  System.out.println(“a=”+a);
最后打印的是a=1,不能理解。

21 个回复

正序浏览
a=a++无论多少次,a还是原来的值,只在java中是这样的,如果在C语音中输出就是2
回复 使用道具 举报
a的初值是1,当运行到 a=a++时,因为=运算符是右结合,这时就是计算(a++),又因为(a++)这个整体,要用到a的值,是先取a的值,取出来之后再进行++运算,所以就把a=1这个值赋给了等号右边。如果是(++a)当运行到这里时需要用到a,这个整体是先将a的值加1,再将结果赋到右边
回复 使用道具 举报
本帖最后由 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,也就是楼主所遇到的情况。
回复 使用道具 举报
本帖最后由 执剑人 于 2016-3-6 11:29 编辑

首先你要清楚打印的a是哪个a?你这样理解就知道了!
int a = 1;
b = a ++;
这时b=1,a = 2
但是你打印的相当于b;
是吧?
回复 使用道具 举报
在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++;你能明白了吗?
回复 使用道具 举报
超人d咖啡也加糖 发表于 2016-2-29 11:44
int a=1;a++;是先用a,再把a加1,此时是1
int a=1; ++a;  是先把a加1了,再拿去用,此时是2
(ps:三楼 ...

我又理解错了。。。。
回复 使用道具 举报
看不懂呢
回复 使用道具 举报
http://blog.csdn.net/miderph84/article/details/3390166  解释的很详细,希望能帮到你
回复 使用道具 举报
++在a的后面,他会先把a的值赋值给在执行
回复 使用道具 举报
先赋值后加1
回复 使用道具 举报
我想他问的是赋值以后a++,此时并没有赋值,所以是无用的
回复 使用道具 举报
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:三楼说的对)
回复 使用道具 举报
前边你理解的都不错,我是这样认为的:a++ 是在自加之前先返回出值,所以a=a++,a自加前是1,所以赋值后还是1 ,也就是说你经过a=a++运算后还是a=1,所以最后输出的字符串就是a=1

同样++a是在自加后返回值,你可以改成a=++a试一下
回复 使用道具 举报
就是普通的顺序结构,
回复 使用道具 举报
这个是要循环的吧,你写的是循环语句吗?
回复 使用道具 举报
赋值后 a = 1; a++ a就是二了,输出a还是1
回复 使用道具 举报
a += 1;这个会加一并赋值。
回复 使用道具 举报 0 1
a++是先赋值再自增,++a是先自增再赋值
回复 使用道具 举报
i++先计算,再赋值

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 很给力!

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马