【问题标题】:what is the value of a after { a=5; a=a++; Syso(a);} [duplicate]{ a=5; 之后 a 的值是多少?一个=一个++; Syso(a);} [重复]
【发布时间】:2015-06-04 22:36:56
【问题描述】:

运行这个程序后,我得到 'a' 的值为 5 而不是 6。为什么?

public class Test
{
    public static void main(String args[])
    {
      int a=5;
      a=a++;                        //post increment operator
      System. out. println (a);  //Output
    }
}

为什么这是程序的输出?

【问题讨论】:

  • 您在第一句话中回答了标题问题。顺便说一句,可以在这个网站上找到答案。这是因为它保存旧值,递增,然后返回您分配的旧值。
  • 你认为答案应该是什么?
  • 仅供参考,您真的只需要 google java post increment operator 就可以在 StackOverflow 上找到大量重复项,此外还有各种其他网站详细解释了后增量运算符的工作原理。
  • What is the output of the program? 5
  • @CodeCamper 输出是 5 而不是 6。为什么?

标签: java assignment-operator post-increment


【解决方案1】:

那是因为帖子增量。在后增量中,返回增量之前的值,然后执行增量。这条线将达到相同的结果System.out.println(a++);。应该打印增量前a 的值。

【讨论】:

  • 但是我的问题有点不同。后递增后,值应递增,即 a=5;一个++;打印 a 时,输出为 6。但如果我们使用 a=a++;而不是一个++;然后打印增加的值,即 6 不会被打印,而是输出为 5。为什么?请解释一下。
  • 正如副本和此处所解释的那样,该值正在增加,但您将其设置回表达式 a++ 返回的原始值。如果您希望它在 递增后返回值,则需要改用 ++a仔细阅读this answer。这是一个非常微妙的细节,但相当直截了当。
【解决方案2】:

场景1(a最终等于5)

a=5;
a=a++;

不一样

场景2(a最终等于6)

a=5;
int a

要理解这一点,您必须分解场景 2 中发生的情况。

  1. 创建一个等于 5 的新原始 int 并在其中放置对它的引用 a
  2. 创建一个新的原始 int 等于 a 所指的值 加 1。
  3. 将对该新原始 int 的引用存储在 a 中。

场景 1 完全不同。

  1. 创建一个等于 5 的新原始 int 并将对它的引用放置在 a 中。
  2. 创建 一个新的原语 int 等于 a 所指的值。
  3. 在可能已经交给垃圾收集器的原始原始 int 上加 1。

您感到困惑的原因是因为您认为a 总是指代内存中的同一个地方。只要您说a=a,您就更改了内存中的位置。现在这是一个新的a,而不是旧的a,所以基本上你的++ 在这种情况下什么都不做。

a=a++; 并不意味着让a 保持为a,然后在此语句之后添加1。它实际上意味着使a 等于一个恰好具有相同值的新int为a,然后将我刚刚扔进黑洞的旧整数加1。

编辑:对 cme​​ts 的回应

如果您不想丢失原来的 a 变量,则必须以不同的方式编写代码。

int a = 5;
int b = a; //stores the original value
a++; //now a equals 6

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2017-12-11
    • 2015-05-14
    • 2021-12-11
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多