解释Java一元运算符

时间:2009-07-18 07:32:23

标签: java

请检查此代码:

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。有人可以解释一元算子。??

5 个答案:

答案 0 :(得分:6)

在声明i = i++中:

  

这是一种保证行为。为了评估赋值的右侧,读取i的值。然后递增i。语句结束将评估结果分配给i

     

i = i++;中有两项任务,最后一项将决定结果。要执行的最后一个将始终是语句级别分配,而不是增量器/减量器。

     

编写代码的可怕方法,但至少你有一个确定性的结果。

http://forums.sun.com/thread.jspa?threadID=318496

答案 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。