2015-03-31 120 views
-5

运行此程序后,我得到'a'的值为5而不是6。为什么?什么是后{a = 5; A = A ++; Syso(a);}

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

为什么这是程序的输出?

+3

您在第一句中回答您的标题问题。答案可以在这个网站上找到btw。这是因为它正在保存旧值,递增,然后返回您分配的旧值。 – keyser 2015-03-31 14:33:20

+0

你认为答案应该是什么? – 2015-03-31 14:37:34

+0

仅供参考如果你真的只需要谷歌Java后增加运算符来查找StackOverflow上的许多重复以及各种其他网站的详细解释后增量操作符如何工作。 – tnw 2015-03-31 14:41:15

回答

0

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

+0

但是这里我的问题有点不同。后递增后,值应增加,即a = 5;一个++;在打印a时,输出将是6.但是,如果我们使用a = a ++;而不是一个++;然后打印然后增加的值,即6不会被打印,而是输出将是5.为什么?请解释。 – JavaSat 2015-03-31 15:26:16

+0

正如在重复和在这里所说的那样,值IS越来越多,但是您将其设置回到由表达式'a ++'返回的原始值。如果你希望它在* incrememting之后返回值*,你需要使用'++ a'来代替。阅读[这个答案](http://stackoverflow.com/a/5413593/770270)*小心*。这是一个非常微妙的细节,但相当直接。 – tnw 2015-03-31 15:39:11

0

方案1(一个最后等于5)

a=5; 
a=a++; 

IS NOT同样的事情

方案2(一个最终等于6)

a=5; 
int a 

要理解这一点,你必须打破down方案2中发生了什么。

  1. 创建一个等于5的新基元int并将其引用到 a中。
  2. 创建一个新的原始INT等于值a指的是 加1
  3. 存储参考到内部a新原始INT。

情况1完全不同。

  1. 创建一个等于5的新基元int并将其引用到a中。
  2. 创建新原语 int等于值a所指的值。
  3. 将1添加到可能已经传递到垃圾回收器的原始int中。

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

a=a++;并不意味着让a逗留a,然后这个语句后加1。这实际意味着是让a等于一个新的int,只是恰巧具有相同的价值a,然后加1那个老诠释我刚投入黑洞。

编辑:回应评论

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

int a = 5; 
int b = a; //stores the original value 
a++; //now a equals 6 
相关问题