【问题标题】:When is a variable with a postfix operator actually incremented?带有后缀运算符的变量何时实际递增?
【发布时间】:2016-01-15 14:28:27
【问题描述】:

假设我有以下代码:

int x = 5;
System.out.println(x++);              // Will print 5
System.out.println("Random code");    // Will write "Random code" 
System.out.print(x):                  // Will write 6

我的问题是:x 实际上在哪一行递增?紧跟在后缀之后?或者就在按顺序调用该变量之前?

我听说序列点与后缀和前缀运算符有关。这主要是我问的原因。

【问题讨论】:

  • 好吧,后缀形式首先返回表达式的当前值,然后对该值执行递增操作。所以它会在第 5 行本身增加。

标签: java


【解决方案1】:

x 的值将在打印后立即递增(在这种情况下)。发生的情况是对变量执行比较/打印/其他一些操作,然后在此类操作之后直接递增。如果你有类似的东西,同样的事情也会发生 int z = 0; if (1 > z++) { system.out.println (z) } ,它将打印 1。

编辑:java 中没有序列点。阅读本文了解更多信息: sequence point concept in java

【讨论】:

    【解决方案2】:

    当你编写代码时

    x++
    

    这会为您返回 x 值并将 x 增加 1。

    所以它在第 5 行本身递增。

    【讨论】:

      【解决方案3】:

      后缀形式首先返回表达式的当前值,然后对该值执行递增操作。所以它会在第 5 行本身增加。

      经典的 for 循环就是一个例子:

      for (int i = 0; i<10; i++)
      {
        //something
      }
      

      我们经常hear that i++ could be replaced by ++i ,因为 for 循环的第三个条件语句本身就是在那里求值的。

      所以如果i = 5,它会在该语句本身上增加到6,然后继续到for循环的主体。如果 postfix 的行为使得 i 仅在下次访问时才增加,那么 i 将在循环的迭代中保持 5 次,这与 ++1 完全不同。

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2011-07-21
        • 2019-09-19
        • 2015-05-23
        相关资源
        最近更新 更多