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
    

为什么这是程序的输出?

【问题讨论】:

您在第一句话中回答了标题问题。顺便说一句,可以在这个网站上找到答案。这是因为它保存旧值,递增,然后返回您分配的旧值。 你认为答案应该是什么? 仅供参考,您真的只需要 google java 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。

编辑:对 cme​​ts 的回应

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

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

【讨论】:

以上是关于a=5; 之后 a 的值是多少?一个=一个++; Syso(a); [重复]的主要内容,如果未能解决你的问题,请参考以下文章

打印2-3+4-5+6....100的值是多少

已知当X=1时,多项式ax5+bx4+cx3+dx2+ex+4的值等于5,则代数式a+b+c+d+e的值是多少

这段代码中变量 a 和 b 的值是多少?

在python中,a+=a-=a的值是多少?

int a=1,b=~a;请问b的值是多少?

逗号表达式的值是啥啊?