a=5; 之后 a 的值是多少?一个=一个++; Syso(a); [重复]
Posted
技术标签:
【中文标题】a=5; 之后 a 的值是多少?一个=一个++; Syso(a); [重复]【英文标题】: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
为什么这是程序的输出?
【问题讨论】:
您在第一句话中回答了标题问题。顺便说一句,可以在这个网站上找到答案。这是因为它保存旧值,递增,然后返回您分配的旧值。 你认为答案应该是什么? 仅供参考,您真的只需要 googlejava post increment operator
就可以在 *** 上找到大量重复项,此外还有各种其他网站详细解释了后增量运算符的工作原理。
What is the output of the program?
5
@CodeCamper 输出是 5 而不是 6。为什么?
【参考方案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 中发生的情况。
-
创建一个等于 5 的新原始 int 并在其中放置对它的引用
a
。
创建一个新的原始 int 等于 a
所指的值
加 1。
将对该新原始 int 的引用存储在 a
中。
场景 1 完全不同。
-
创建一个等于 5 的新原始 int 并将对它的引用放置在
a
中。
创建 一个新的原语 int 等于 a 所指的值。
在可能已经交给垃圾收集器的原始原始 int 上加 1。
您感到困惑的原因是因为您认为a
总是指代内存中的同一个地方。只要您说a=a
,您就更改了内存中的位置。现在这是一个新的a
,而不是旧的a
,所以基本上你的++
在这种情况下什么都不做。
a=a++;
并不意味着让a
保持为a
,然后在此语句之后添加1。它实际上意味着使a
等于一个恰好具有相同值的新int为a
,然后将我刚刚扔进黑洞的旧整数加1。
编辑:对 cmets 的回应
如果您不想丢失原来的 a
变量,则必须以不同的方式编写代码。
int a = 5;
int b = a; //stores the original value
a++; //now a equals 6
【讨论】:
以上是关于a=5; 之后 a 的值是多少?一个=一个++; Syso(a); [重复]的主要内容,如果未能解决你的问题,请参考以下文章