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

在Java中添加后增量

  •  4
  • user1765876  · 技术社区  · 10 年前

    我有以下java代码

    int x=5;
    System.out.println(x++ + ++x);
    

    输出为12。

    我想应该是11点。

    这里有三个运算符:

    • + 附加
    • ++ (岗位)
    • ++ (预)
    • 列表项目

    上面的打印语句是按什么顺序编译的?

    如果我写 int x=5; 然后 ++x x==6 x==5 我还没写过 x=++x 。新值是否存储在x中?

    寻找一种在Java或.NET中记住运算符优先级的方法,就像我们有DMAS一样。他们对此也有类似之处吗?

    6 回复  |  直到 10 年前
        1
  •  5
  •   AbhinavRanjan    10 年前

    x++ 等于 5 但是 x 已成为 6 . ++x 方法 6. 增量为 1 那就是 ++x(x) 7 所以 5 + 7 = 12 是正确的答案。

        2
  •  2
  •   Bathsheba    10 年前

    在C和C++中 未定义行为 (因为在这些语言中 + 没有 序列 这两个表达式)。

    但在Java中 定义评估顺序从左到右。

    很简单:第一个表达式是 x++ 其值为5,但增加 x 至6。

    第二个表达式是 ++x 这会增加 x(x) 从6到7,值为7。

    5 + 7 = 12 :完成。

    不用说,不建议使用这种代码。而C/C++的端口将是一个遥远的地方。

        3
  •  1
  •   Christian Tapia    10 年前

    在线路中

    System.out.println(x++ + ++x);
    

    第一 x 是5,所以之后 x++ , x(x) 将为6,但将计算表达式 之前 增量,因此您将具有:

    5 + ++x
    

    此时此刻 x(x) 是6,所以 ++x 将首先递增 x(x) 然后计算表达式。最后,您将获得:

    5 + 7
    

    这是 12 .

        4
  •  1
  •   Squizer    10 年前

    求值/增量将在+运算符之前发生,一个接一个

    您的println是:
    (x++ + ++x) 其中x=5
    (5++ + ++x) 其中x=5
    (5 + ++x) 其中x=6
    (5 + x) 其中x=7
    (5 + 7) =12

    在对x求和之前,x有2个增量,从5到7,从而解释了12的总数。

        5
  •  1
  •   Community Egal    7 年前

    post increment

    仅在表达式求值期间 pre incremnted 值。(后增量运算符仅在表达式求值完成后使用) 这可能会帮助你

       =x++ + ++x
       =x++ + 6
       =6 + 6
       =12
    
        6
  •  0
  •   Karura91    10 年前

    重点是:

    x++在表达式中赋值后递增x。 ++x增量x在表达式中赋值之前。

    所以,在你的例子中,你实际上做了5+7。 5因为增量是在求值之后进行的,所以x变为6。 7,因为增量是在求值之前完成的,所以x变为7。