包含前置增量和 post 增量的函数结果不同
Result of function that includes pre- and post-increment differs
我必须理解一些在函数中混合预增量和 post 增量的代码。有一件事让我很困惑。
所以我尝试测试一些较小的功能。但我无法解释以下行为:
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
谁能告诉我为什么?
i++ * ++i * 2
--> 1 * 3 * 2 --> 6
++x * x++ * 2
--> 2 * 2 * 2 --> 8
粗体中的重要值。
Java中返回值时前缀和后缀递增的区别,Oracle自己可以总结的比较好(我的加粗再次加粗):
The increment/decrement operators can be applied before (prefix) or after (postfix) the operand. The code result++; and ++result; will both end in result being incremented by one. The only difference is that the prefix version (++result) evaluates to the incremented value, whereas the postfix version (result++) evaluates to the original value. If you are just performing a simple increment/decrement, it doesn't really matter which version you choose. But if you use this operator in part of a larger expression, the one that you choose may make a significant difference.
来源here。
在您的特定情况下,由于后缀的计算结果为原始值,并且同一算术运算符的运算顺序是从左到右 - 此处仅适用乘数 - 您的运算按上述方式转换。
Post-increment增加i
的值但不会立即赋值i
.
的新值
预增量增加i
的值,并立即赋予新值
因此,在您的 y 示例中,在 i++
、
之后
i
已变为 2
,但它仍然保持 1
的先前值。
当++i
发生时,值为2的i
会增加1
,同时赋值3
。因此,1 * 3 * 2
为我们提供 6
的值 y
。
x
、
也一样
当++x
发生时,x
立即被赋予2
的新值。
然而,当x++
发生时,x增加了1
但是仍然被分配了之前的值2
。因此,2 * 2 * 2
给我们 8
.
我必须理解一些在函数中混合预增量和 post 增量的代码。有一件事让我很困惑。
所以我尝试测试一些较小的功能。但我无法解释以下行为:
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
谁能告诉我为什么?
i++ * ++i * 2
--> 1 * 3 * 2 --> 6++x * x++ * 2
--> 2 * 2 * 2 --> 8
粗体中的重要值。
Java中返回值时前缀和后缀递增的区别,Oracle自己可以总结的比较好(我的加粗再次加粗):
The increment/decrement operators can be applied before (prefix) or after (postfix) the operand. The code result++; and ++result; will both end in result being incremented by one. The only difference is that the prefix version (++result) evaluates to the incremented value, whereas the postfix version (result++) evaluates to the original value. If you are just performing a simple increment/decrement, it doesn't really matter which version you choose. But if you use this operator in part of a larger expression, the one that you choose may make a significant difference.
来源here。
在您的特定情况下,由于后缀的计算结果为原始值,并且同一算术运算符的运算顺序是从左到右 - 此处仅适用乘数 - 您的运算按上述方式转换。
Post-increment增加i
的值但不会立即赋值i
.
预增量增加i
的值,并立即赋予新值
因此,在您的 y 示例中,在 i++
、
i
已变为 2
,但它仍然保持 1
的先前值。
当++i
发生时,值为2的i
会增加1
,同时赋值3
。因此,1 * 3 * 2
为我们提供 6
的值 y
。
x
、
当++x
发生时,x
立即被赋予2
的新值。
然而,当x++
发生时,x增加了1
但是仍然被分配了之前的值2
。因此,2 * 2 * 2
给我们 8
.