【问题标题】:post increment with addition in Java在 Java 中添加后增量
【发布时间】:2014-04-24 05:57:18
【问题描述】:

我在java中有以下代码

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

输出为 12。

我认为应该是 11 点。

我们这里有三个运算符:

  • +加法
  • ++(发帖)
  • ++(预)
  • 列表项

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

如果我写int x=5; 然后++x,那么x==6x==5 因为我没有写x=++x。新值是否存储在 x 中?

寻找一种方法来记住 Java 或 .NET 中的运算符优先级,就像我们有 DMAS 一样。他们也可以类比吗?

【问题讨论】:

  • 确实意识到,如果人们停止做愚蠢的事情,他们就不会需要问这样的问题,不是吗? :-) 说真的,谁会写像x++ + ++x 这样的代码?
  • @paxdiablo 如果在考试中我必须写出以下语句的输出,通过它只有 1 分,我应该说“谁做这个试卷”:)
  • @user1765876 说真的,我会 (a) 回答它并 (b) 问教授为什么他们会问这样的问题,因为这是你应该永远不会 i> 在现场看到。但是,我是从毕业后世界的舒适中说的,在那里教授不能再影响我了。 ;)
  • @yshavit 我同意我们在现实世界中看不到这样的事情,但这样的问题是检查/确保学生概念的好方法。

标签: java .net operators addition post-increment


【解决方案1】:

在表达式评估期间,仅使用 pre incremnted 值。(在表达式评估完成后使用后递增运算符) 这可能对你有帮助

   =x++ + ++x
   =x++ + 6
   =6 + 6
   =12

【讨论】:

  • 这与其他答案(5 和 7)相矛盾,可能不正确。
【解决方案2】:

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

您的 println 是,逐步:
(x++ + ++x) where x=5
(5++ + ++x) where x=5
(5 + ++x) where x=6
(5 + x) where x= 7
(5 + 7)=12

在将 x 相加之前,您有 2 个 x 增量,从 5 到 7,从而解释了总数为 12。

【讨论】:

    【解决方案3】:

    排队

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

    第一个 x 是 5,所以在 x++ 之后,x 将是 6,但表达式将在 增量之前计算,因此您将拥有:

    5 + ++x
    

    此时x 为6,因此++x 将首先将x 递增到7,然后计算表达式。最后,您将拥有:

    5 + 7
    

    这是12

    【讨论】:

      【解决方案4】:

      重点是:

      x++ 在表达式中的赋值之后增加 x。 ++ x 在表达式中赋值之前增加 x。

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

      【讨论】:

        【解决方案5】:

        在 C 和 C++ 中,这种事情是未定义的行为(因为在这些语言中,+ 不会排序这两个表达式)。

        但在 Java 中,它定义的。评估顺序是从左到右。

        很简单:第一个表达式是x++,它的值为5,但将x增加到6。

        第二个表达式是 ++x,它将 x 从 6 增加到 7,其值为 7。

        5 + 7 = 12:完成。

        不用说,这种代码是不推荐的。而移植到 C/C++ 将是灾难性的。

        【讨论】:

        • +1 表示在一些 c 程序员开始获得任何想法之前,它在 c/c++ 中是未定义的。好像 c 的语义不够复杂
        【解决方案6】:

        x++ 等于 5x 已变为 6++x 表示6 增加了1,即++x7。所以5 + 7 = 12是正确答案。

        【讨论】:

          猜你喜欢
          • 2020-03-26
          • 1970-01-01
          • 2012-10-17
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          • 2015-05-03
          • 2015-12-21
          • 1970-01-01
          相关资源
          最近更新 更多