代码之家  ›  专栏  ›  技术社区  ›  Reji

解释Java一元运算符

  •  1
  • Reji  · 技术社区  · 16 年前

    请检查此代码:

    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
    

    问题出在第2行。有人能解释一下一元运算符吗??

    5 回复  |  直到 13 年前
        1
  •  6
  •   Miles    16 年前

    在声明中 i = i++ :

    这是有保证的行为。价值 i 是为了评估作业的右侧而阅读的。 然后递增。语句结束结果在要分配给的评估结果中 .

    有两个作业在 i = i++; 最后一个执行将决定结果。最后执行的总是语句级赋值,而不是递增/递减。

    编写代码的方法很糟糕,但至少在这里您得到了一个确定性的结果。

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

        2
  •  3
  •   Uri    16 年前

    当您执行x++时,结果是递增之前的值

        3
  •  2
  •   andandandand    16 年前

    替换此行:

    结果=结果+;

    用:

    结果++;

    在第一行中,您将为结果指定零。为什么?因为post increment操作符首先将分配结果为零。

    如果你写过:

    结果=++结果;

    您将首先递增,然后分配,同时获得您想要的结果。

        4
  •  2
  •   qdolan    16 年前

    这是预期的行为。如果您观察在字节码级别上执行所讨论的行时所发生的情况,那么实际发生的事情就更有意义了:

    结果=结果+;

    registera=结果(registera==0)
    result+=1(result==1)--前两行是result++部分
    结果=寄存器A(结果=0)

    变量“result”在此语句中被分配两次,一次是递增的,然后是递增前的值,这基本上使它成为noop。

        5
  •  2
  •   beggs    13 年前

    你需要知道你把一元运算符放在哪里。放置 ++ 之后 变量导致Java使用变量对表达式求值,然后增加变量,同时放置 ++ 之前 变量导致Java增加变量,然后计算表达式。