【问题标题】:Pre and post increment in java [duplicate]java中的前后增量[重复]
【发布时间】:2019-03-27 23:46:24
【问题描述】:

我知道前置和后置自增运算符是如何工作的,但最近我发现了 Java 中的一个奇怪行为。到目前为止我所知道的是(正如answer 中所解释的那样):

a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)

这清楚地表明 ++a 返回递增后的值,a++ 返回递增前的值。但是最近,我遇到了这段代码:

int a = 0;
int b = a++;
int c = ++b;
System.out.println("b=" + b + "\nc=" + c);

这段代码的输出是:

b=1
c=1

这很奇怪,因为 a++ 应该返回 0,并递增 a,将 b 的值保持为 0,从上面引用的答案中可以看出,而在下一行中,b 应该先递增,然后再将值分配给 c , 使它 1. 这里发生了什么?

【问题讨论】:

  • 正是您所说的:“b 应该首先递增” - 所以当您打印 b 时它是 1,然后“值被分配给 c”,即 1
  • 这里发生了什么? 可恶。将递增(或递减)运算符与其他运算符混合使用会造成混淆。
  • 一切都发生在第三行。一开始,如你所说,b = 0。然后 b 预递增到 1,并将 1 分配给 c。就是这样。
  • introcs.cs.princeton.edu/java/11precedence++ 尽管看起来很酷,但排名只有区区 15,而 = 却位居榜首!

标签: java post-increment pre-increment


【解决方案1】:

调用int b = a++时,将a(0)的值赋给b(现在为0),然后a自增为1。

因此,当调用 int c = ++b 时,b 为 0。b 然后递增到 1(通过 ++b),然后将其值分配给 c。

最后,b=1 和 c=1

【讨论】:

    【解决方案2】:

    究竟是什么让你觉得奇怪,因为它是预期的行为......

    int a = 0; // 声明一个
    诠释 b = a++; // 声明 b 的值为 0,之后 a 变为 1。
    诠释 c = ++b; // 这里 c 和 b 都得到 0++ -> 1

    System.out.println("b=" + b + "\nc=" + c); 打印预期的输出。

    b=1
    c=1
    

    【讨论】:

    • 哦,是的。真的很抱歉,我完全忽略了 ++b 也会改变 b 的值的事实。关闭问题。我的坏
    • 我认为你可以删除它,因为它对社区没有价值。
    猜你喜欢
    • 2015-12-21
    • 2015-05-21
    • 2014-12-09
    • 2011-06-10
    • 2015-05-03
    • 2012-10-03
    • 2016-07-08
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多