weixin_33365543
weixin_33365543
采纳率100%
2015-12-20 13:04 阅读 2.3k
已采纳

JAVA for循环变量问题

为什么j++和++j的输出会天壤之别?求大神指教!图片图片

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

9条回答 默认 最新

  • 已采纳
    weixin_33365543 weixin_33365543 2015-12-20 14:02

    我的理解,是否可以解释的通。图片

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-12-20 13:07

    问题的关键在于你的表达式是一个副作用表达式,用它给它自身赋值,存在二义性。
    如果你是
    x=j++;
    或者j = j + 1
    都不存在这种二义性。

    现在的问题就是看编译器怎么理解了。也就是说作为一个表达式,++是对原先表达式中的j自增,还是对赋值以后的j自增。

    点赞 2 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2015-12-20 13:21

    j=++j这句代码,编译器会给出警告The assignment to variable j has no effect。所以,这行代码本质上就是++j操作。
    而j=j++;这句代码则能正确赋值,但是它的本质也是j=j;因为在java中的这样的赋值相当于下面的赋值操作:

         temp = j;
         j = j+1 ;
         j = temp;
    
    

    所以就是这两种结果了。

    点赞 1 评论 复制链接分享
  • wohenni0931 wohenni0931 2015-12-20 13:35

    j=j++:因为“++”的运算级比赋值“=”高,所以先执行j++,但是j++的规则是先把原先的j保存,然后执行+1操作,结果就是把++前的j 赋值给j。
    j=++j:原理同上,只是保存的是执行++后的j赋值给j

    点赞 1 评论 复制链接分享
  • weixin_33365543 weixin_33365543 2015-12-20 13:06

    最后一句println输出 没有截图

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-12-20 13:08

    在我给你的链接中详细说明了二义性的问题。

    点赞 评论 复制链接分享
  • CSDNXIAOS Robot-S 2015-12-20 13:11

    在C99之前的编译器,不支持括号内进行定义变量
    2.在C++中是允许定义变量的,其c99之后的编译器亦可以在括号内进行声明变量。

    #include<stdio.h>//c++可以编译,但是c不能编译
    int main()
    {
    int sum=0;
    for(int i=0;i<=100;++i)//定义并初始化变量i=0.实际编译器运行不起来。但把int i......
    答案就在这里:for循环内变量定义问题
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    点赞 评论 复制链接分享
  • qq_18221459 转身已离去 2015-12-20 13:32

    j=j++和j=++j的含义不一样,第一个是先将j的值赋给j在执行++操作,所以还为0

    点赞 评论 复制链接分享
  • longfengfang 似水流年的铁龙 2015-12-20 13:35

    j = j++赋值给j时是j加1之前的值即为0,所以一直是在0加1之前赋给j,所以j一直是0,而j = ++j是在j加1之后再赋值给j,所以j会逐渐增1,还有就是i的值应该是从0开始增长的吧,你的截图是不是不完全

    点赞 评论 复制链接分享

相关推荐