什么是后{a = 5; A = A ++; Syso(a);}
运行此程序后,我得到'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
}
}
为什么这是程序的输出?
这是因为后增量。在后增量中,返回增量前的值,然后执行增量。这条线将达到相同的结果System.out.println(a++);
。应该打印增量前的值a
。
但是这里我的问题有点不同。后递增后,值应增加,即a = 5;一个++;在打印a时,输出将是6.但是,如果我们使用a = a ++;而不是一个++;然后打印然后增加的值,即6不会被打印,而是输出将是5.为什么?请解释。 – JavaSat 2015-03-31 15:26:16
正如在重复和在这里所说的那样,值IS越来越多,但是您将其设置回到由表达式'a ++'返回的原始值。如果你希望它在* incrememting之后返回值*,你需要使用'++ a'来代替。阅读[这个答案](http://stackoverflow.com/a/5413593/770270)*小心*。这是一个非常微妙的细节,但相当直接。 – tnw 2015-03-31 15:39:11
方案1(一个最后等于5)
a=5;
a=a++;
IS NOT同样的事情
方案2(一个最终等于6)
a=5;
int a
要理解这一点,你必须打破down方案2中发生了什么。
- 创建一个等于5的新基元int并将其引用到
a
中。 - 创建一个新的原始INT等于值
a
指的是 加1 - 存储参考到内部
a
新原始INT。
情况1完全不同。
- 创建一个等于5的新基元int并将其引用到
a
中。 - 创建新原语 int等于值a所指的值。
- 将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
您在第一句中回答您的标题问题。答案可以在这个网站上找到btw。这是因为它正在保存旧值,递增,然后返回您分配的旧值。 – keyser 2015-03-31 14:33:20
你认为答案应该是什么? – 2015-03-31 14:37:34
仅供参考如果你真的只需要谷歌Java后增加运算符来查找StackOverflow上的许多重复以及各种其他网站的详细解释后增量操作符如何工作。 – tnw 2015-03-31 14:41:15