请检查此代码:
int result = 0;
result = result++;
System.out.println("Result 1 = " + result);
result++;
System.out.println("Result 2 = " + result);
我期待的输出是:
Result 1 = 1
Result 2 = 2
但我得到了输出:
Result 1 = 0
Result 2 = 1
问题在于Line2。有人可以解释一元算子。??
答案 0 :(得分:6)
在声明i = i++
中:
这是一种保证行为。为了评估赋值的右侧,读取
i
的值。然后递增i
。语句结束将评估结果分配给i
。
i = i++;
中有两项任务,最后一项将决定结果。要执行的最后一个将始终是语句级别分配,而不是增量器/减量器。编写代码的可怕方法,但至少你有一个确定性的结果。
答案 1 :(得分:3)
执行x ++时,结果是增量前的值
答案 2 :(得分:2)
替换此行:
result = result ++;
使用:
结果++;
在第一行中,您为结果指定零。为什么?因为后增量运算符首先将分配结果为零。
如果你写了:
result = ++ result;
你首先递增然后分配,也得到你想要的结果。
答案 3 :(得分:2)
你需要意识到放置一元算子的位置。在变量之后放置++
会导致java使用变量计算表达式然后递增变量,而在变量之前放置++
会导致java增加变量然后评估表达式。
答案 4 :(得分:2)
这是预期的行为。如果你看一下相关行执行时在字节码级别发生的事情,那么实际发生的事情会更有意义:
result = result ++;
registerA =结果(registerA == 0)
结果+ = 1(结果== 1) - 前两行是结果++部分
result = registerA(result == 0)
变量“result”在此语句中被赋值两次,一次是增量,然后是增量之前的值,这基本上使它成为noop。