a {a = 5之后的值是多少; A = A ++; Syso的(a);}

时间:2015-03-31 14:32:38

标签: java assignment-operator post-increment

运行此程序后,我正在获得' 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
    }
}

为什么这是程序的输出?

2 个答案:

答案 0 :(得分:0)

那是因为后期增量。在后增量中,返回增量前的值,然后执行增量。该行将获得相同的结果System.out.println(a++);。应该打印增量前a的值。

答案 1 :(得分:0)

场景1(最后等于5)

a=5;
a=a++;

不是同样的事情

场景2(最后等于6)

a=5;
int a

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

  1. 创建一个等于5的新原语int,并在其中放置对它的引用 a
  2. 创建一个等于a所指的值的新原语int     加1。
  3. a内存储对该新原语int的引用。
  4. 情景1完全不同。

    1. 创建一个等于5的新原语int,并在a内放置对它的引用。
    2. 创建 新原语 int等于a所指的值。
    3. 将1添加到原始的int,这可能已经被移交给垃圾收集器了。
    4. 您感到困惑的原因是因为您认为a总是指内存中的相同位置。一旦你说a=a你改变了记忆中的位置。现在这是一个新的a,而不是旧的a,所以基本上你的++在这种情况下什么都不做。

      a=a++;并不意味着让a保持为a,然后在此声明之后添加1.实际意味着让a等于新int恰好恰好与a具有相同的值,然后将1添加到刚刚投入黑洞的旧int中。

      编辑:对评论的回应

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

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