qq_34193086
qq_34193086
采纳率50%
2016-03-26 09:08 阅读 1.4k

循环问题,关于后++的问题

int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j);
为什么输出的j是0而不是100呢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • Alisawxn 王雪娜-Alisa 2016-03-26 09:25

    因为后++是先取值,后+1,即你的j先取了0,后+1,虽然你的J+1了但是你没取啊,下次循环的时候j=0依旧。。。。

    点赞 4 评论 复制链接分享
  • bianfeiniao 大头皓哥 2016-03-26 09:25

    问题出在j=j++这一句,
    首先说一下a++与++a运算符区别,
    a++,这个表达式的作用是先返回a的值,再将a++
    而++a,这个表达式的作用是先将a++,在返回a的值,
    也就是说

    a=0;b=a++;执行这两句后,b=a的值(0),在将a++,即a的值为1,b的值为0
    a=0;b=++a;执行这两句后,先将a++,再b=a的值(1),即a的值为1,b的值也为1

    通常,可以这样记
    a++,a在前面,所以先返回是原来a的值,在做+法。

    ++a,++在前面,所以先做加法,在返回值是原来a的值+1.

    那么j=0;j=j++;最终的结果是
    j=0; ==> j = 0;
    j = j++; ==>先执行j++;j=1,但该表达式返回值为0
    在执行赋值:j=j++,因为j++表达式的返回值为0,所以执行完后j=0;
    最终不管循环多少次,j始终为0.

    把for一句改为:for(i=0;i<100;i++){ j=++j; } ,你可能能得到你想要的结果。

    点赞 1 评论 复制链接分享
  • qq423399099 小灸舞 2016-03-26 09:22

    相当奇怪啊,楼主代码截个图看看,是不是漏了啥

    点赞 评论 复制链接分享
  • Royal_lr Royal_lr 2016-03-26 09:57

    本来j++执行后j会为1的,,但是你又赋值给j,,所以j还是0,,,,所以无论多少次j依旧是0,,你直接j++就行了,,不要赋值了

    点赞 评论 复制链接分享
  • sinat_34437135 Aretmis 2016-03-26 10:28

    是先取值后++的,这里j没有取到

    点赞 评论 复制链接分享
  • qq_30607881 moker墨客 2016-03-26 12:07

    是先取值运算后进行++运算

    点赞 评论 复制链接分享
  • njzyydx 亦需亦求 2016-03-26 12:53

    既然是先取值运算,后进行++运算,j在后++运算中不就被赋值为1了么

    点赞 评论 复制链接分享

相关推荐