a++ 的值的疑问?

a++ 的值的疑问?

int a = 0;        
for (int i = 0; i < 99; i++) {
    a = ++a;
}
    System.out.println(a);
int a = 0;        
for (int i = 0; i < 99; i++) {
    a = a++;
}
    System.out.println(a);
int a = 0;
int b = 0;
for (int i = 0; i < 99; i++) {
    a = a ++;
    b = a ++;
    }
System.out.println(a);
System.out.println(b);

第1段代码a的值为99,为什么第2段代码a却为0, 而第3段代码 a,b的值分区为99,98?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

        同学你好,1、在第二段代码中,a=a++是先进行赋值运算,再进行自增,a的初始值为0,先将赋值给a,再执行a++,当第二次循环时,同样先将之前的a是0赋值,再进行自增,循环完成后,a的值还是0,如果将a=去掉,只有a++,a进行自增运算,循环完成后,就是99了哦

http://img1.sycdn.imooc.com//climg/5d3bccc40001f05805440249.jpg

        2、在第三段代码中是同样的道理,a=a++先将a的初始值赋值a,再进行自增,所以此时的a最大值是98

http://img1.sycdn.imooc.com//climg/5d3bce0e00018a7304990622.jpg

然后b=a++; 是将a的值先赋给b,然后a在执行自增  所以b的值最后对应就是98,赋值完成后a再自增,就是99了!例如

http://img1.sycdn.imooc.com//climg/5d3bceb00001a0f905310631.jpg

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 我想问一下在第二段代码中a=a++中a初始是等于0,将0赋值给a这个地方我没有疑问,但是在执行完赋值语句后a++不会让定义的a自加1吗?然后让a=1然后继续循环,我用编译器运行过那端代码但是和我自己想的不一样。 我想问的总的来说有两点问题: 1.a=a++在执行完赋值语句后a++为什么不会在累计加到a上,而是一直是用0进行赋值。 2.在第三段代码,a=a++;b=a++中,b=a++为什么等于0,然后在执行完b=a的赋值之后,这个时候的a++为什么能加到a上。 这个问题想一天了能帮我解答一下吗?
    2019-07-27 19:17:47
  • 同学,你好!a=a++;这种自增后再赋值给自身的运算确实是比较特别的,前面的老师已经解释了运算的规则,同学可以参考。这个属于Java的语法规则问题,Java底层是这么设计的,我们只能遵循这种规则,即使有的时候感觉并不合理。一般开发中不建议这么写,不符合一般规则,容易造成混乱。祝学习愉快!
    2019-07-28 10:09:59
  • https://stackoverflow.com/questions/7911776/what-is-x-after-x-x/7911791#7911791 对于a=a++,我的理解是 首先. a=a,然后a增加1, 但是a已经被赋值了,所以后面那个++ 也就无效了。a还是原来的值。 对于第2个a=a++,b=a++。执行a=a++时,a的值是0, 这一点上面说明了。然后执行b=a++,因为a的值没有赋值给a自己,而是赋值给了b, 所以a++可以加到a上面了。
    2019-07-29 05:14:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师