为了账号安全,请及时绑定邮箱和手机立即绑定

包含前增量和后增量的函数的结果不同

包含前增量和后增量的函数的结果不同

小唯快跑啊 2023-05-10 15:04:09
我必须理解一些混合函数前后增量的代码。有一件事让我很困惑。所以我尝试测试一些较小的功能。但我无法解释以下行为:int i = 1;i = i++ * ++i * 2;System.out.println("i = " + i);int x = 1;x = ++x * x++ * 2;System.out.println("x = " + x);预期的输出是: i = 8 x = 8但实际上是: i = 6 x = 8有人能告诉我为什么吗?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

  • i++ * ++i * 2--> 1 * 3 * 2 --> 6

  • ++x * x++ * 2--> 2 * 2 * 2 --> 8

重要值以粗体显示

Java 中返回值时前缀和后缀递增的区别可以由 Oracle 自己更好地总结(为了突出显示,我再次加粗):

可以在操作数之前(前缀)或之后(后缀)应用递增/递减运算符。代码结果++;和++结果;两者都将以结果递增 1 结束。唯一的区别是前缀版本 (++result) 评估为增量值,而后缀版本 (result++) 评估为原始值。如果您只是执行简单的递增/递减,那么选择哪个版本并不重要。但是,如果您在较大表达式的一部分中使用此运算符,则您选择的运算符可能会产生重大差异。

在您的特定情况下,由于后缀的计算结果为原始值,并且相同算术运算符的运算顺序从左到右 - 此处仅适用乘数 - 您的运算将按上述方式进行翻译。


查看完整回答
反对 回复 2023-05-10
?
www说

TA贡献1775条经验 获得超8个赞

后增量增加了的值i,但不会立即分配新的值i

预增量增加值i并立即分配新值。

因此,在您的 y, after 示例中i++

i已经成为2但它仍然坚持以前的价值1

发生时++iiwith 的值会增加1,同时赋值给新的值3。因此,给了我们的1 * 3 * 2价值。6y

也一样x

发生时++xx立即分配 的新值2

然而,当x++发生时,x 增加了1 仍被分配了先前的值2。因此,2 * 2 * 2给我们8


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信