Java 包含前增量和后增量的函数的结果不同
我必须理解一些在函数中混合了前置和后置增量的代码。有一件事让我困惑 所以我试着测试一些较小的函数。但我无法解释以下行为:Java 包含前增量和后增量的函数的结果不同,java,post-increment,pre-increment,Java,Post Increment,Pre Increment,我必须理解一些在函数中混合了前置和后置增量的代码。有一件事让我困惑 所以我试着测试一些较小的函数。但我无法解释以下行为: 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*
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
有人能告诉我为什么吗?
-->1*3*2-->6i++*++i*2
-->2*2*2-->8++x*x++*2
在您的特定情况下,由于后缀计算为原始值,并且同一算术运算符的运算顺序为从左到右-此处仅应用乘法器-您的运算将按上述方式进行转换 增量后增加
i
的值,但不会立即分配i
的新值
预增量增加i
的值,并立即分配新值
因此,在y的示例中,在i++
之后
i
已变为2
,但它仍保留以前的值1
当出现++i
时,值为2的i
将增加1
,同时,分配新值3
。因此,1*3*2
为我们提供了y
的值6
这同样适用于x
当出现++x
时,x
立即被分配新值2
但是,当出现x++
时,x会增加1
,但2
的前一个值仍会被赋值。因此,2*2*2
为我们提供了8