Java 在{a=5;a=a+;+;;Syso(a)}之后,a的值是多少
运行这个程序后,我得到的“a”值是5而不是6。为什么Java 在{a=5;a=a+;+;;Syso(a)}之后,a的值是多少,java,assignment-operator,post-increment,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 } } 为什么这是程序的输出?这是因为后期增量。在post增
public class Test
{
public static void main(String args[])
{
int a=5;
a=a++; //post increment operator
System. out. println (a); //Output
}
}
为什么这是程序的输出?这是因为后期增量。在post增量中,返回增量之前的值,然后执行增量。此行将获得相同的结果
System.out.println(a++)代码>。应打印增量前a
的值。场景1(a最终等于5)
这和
场景2(a最终等于6)
要理解这一点,您必须分解场景2中发生的情况
创建一个等于5的新基元int,并在其内部放置一个引用
a
李>
创建一个新的原语int,该值等于a
所引用的值
加1
将对新基元int的引用存储在a
中
场景1完全不同
创建一个等于5的新基元int,并在a
中放置对它的引用李>
创建一个新的原语,该原语等于a所引用的值
将1添加到原始原语int,该原语int可能已经传递给垃圾收集器
您之所以感到困惑,是因为您认为a
总是指内存中的同一个位置。你一说a=a
就改变了内存中的位置。这现在是一个新的a
,而不是原来的a
,因此本质上你的++
在这种情况下什么都不做
a=a++
并不意味着让a
保持为a
,然后在此语句后添加1。它的实际含义是,使a
等于一个新的int,恰好与a
具有相同的值,然后在我刚刚扔进黑洞的旧int上加1
编辑:对评论的回应
如果您不想丢失原始的变量,则必须以不同的方式编写代码
int a = 5;
int b = a; //stores the original value
a++; //now a equals 6
你在第一句话中回答了标题问题。答案可以在这个网站上找到。这是因为它保存旧值,递增,然后返回旧值,你分配的。你认为答案应该是什么?仅供参考,你真的只需要谷歌java增量后操作符
就可以在StackOverflow上找到大量的重复项,以及其他各种网站,详细解释增量后操作符的工作原理。程序的输出是什么?
5@CodeCamper 输出是5而不是6。为什么?但这里我的问题有点不同。增加后,该值应增加,即a=5;a++;打印a时,输出为6。但是如果我们使用a=a++;而不是a++;然后打印,然后递增的值即6不会被打印,而是输出为5。为什么?请解释。如副本和此处所述,该值正在递增,但您正在将其设置回由表达式a++
返回的原始值。如果希望它在递增后返回值,则需要使用++a
。仔细阅读。这是一个非常微妙的细节,但相当直截了当。
a=5;
int a
int a = 5;
int b = a; //stores the original value
a++; //now a equals 6