后缀一元运算符到底什么时候发生?
When exactly does postfix unary operator happen?
我读了一些关于一元运算符的 post:
What is the Difference between postfix and unary and additive in java
"C - C++" joke about postfix/prefix operation ordering
还有一些。
但是,我还是不明白究竟是什么时候改变了值。
例如:
int x = 1;
x = x++;
System.out.print("x = x++ ==> ");
System.out.print(" x = " + x);
System.out.println();
int x = 1;
x = x++ + x++;
System.out.print("x = x++ + x++ ==> ");
System.out.print(" x = " + x);
System.out.println();
输出为:
x = x++ ==> x = 1
x = x++ + x++ ==> x = 3
所以在第一个块中 x
被分配给 x
然后递增,但该值从未被使用,否则输出将是 x = 2
.
在第二个块中,如果我理解正确,第一个 x++
在赋值之前求值,第二个 x++
在赋值之后求值但从未使用过。
如果在第二个块中,两个 x++
都在赋值后计算但从未使用过,则输出将是 x = 2
。如果两者都被使用,输出将是 x = 4
。
我的IDE也说明第一个x++
用了,第二个没用:
总而言之 - 我仍然对确切增量完成的时间和方式感到困惑。
行
x = x++ + x++;
假设x = 1
,第一个x++
returns“1”作为值,然后递增x
到 2. 所以基本上,它将旧值分配回 x
.
第二个x++
做同样的事情;它 returns x
的值,现在是 2,然后才将其值递增到 3 - 该值未被使用。
您的代码等同于:
tmp = x;
x = x + 1;
tmp2 = x;
x = x + 1; // not used
x = tmp + tmp2;
可能对您有帮助的链接:
- JSL - 15.14.2. Postfix Increment Operator ++
- JLS - 15.15.1. Prefix Increment Operator ++
- What is x after “x = x++”?
我读了一些关于一元运算符的 post: What is the Difference between postfix and unary and additive in java "C - C++" joke about postfix/prefix operation ordering
还有一些。
但是,我还是不明白究竟是什么时候改变了值。
例如:
int x = 1;
x = x++;
System.out.print("x = x++ ==> ");
System.out.print(" x = " + x);
System.out.println();
int x = 1;
x = x++ + x++;
System.out.print("x = x++ + x++ ==> ");
System.out.print(" x = " + x);
System.out.println();
输出为:
x = x++ ==> x = 1
x = x++ + x++ ==> x = 3
所以在第一个块中 x
被分配给 x
然后递增,但该值从未被使用,否则输出将是 x = 2
.
在第二个块中,如果我理解正确,第一个 x++
在赋值之前求值,第二个 x++
在赋值之后求值但从未使用过。
如果在第二个块中,两个 x++
都在赋值后计算但从未使用过,则输出将是 x = 2
。如果两者都被使用,输出将是 x = 4
。
我的IDE也说明第一个x++
用了,第二个没用:
总而言之 - 我仍然对确切增量完成的时间和方式感到困惑。
行
x = x++ + x++;
假设x = 1
,第一个x++
returns“1”作为值,然后递增x
到 2. 所以基本上,它将旧值分配回 x
.
第二个x++
做同样的事情;它 returns x
的值,现在是 2,然后才将其值递增到 3 - 该值未被使用。
您的代码等同于:
tmp = x;
x = x + 1;
tmp2 = x;
x = x + 1; // not used
x = tmp + tmp2;
可能对您有帮助的链接:
- JSL - 15.14.2. Postfix Increment Operator ++
- JLS - 15.15.1. Prefix Increment Operator ++
- What is x after “x = x++”?