Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在{a=5;a=a+;+;;Syso(a)}之后,a的值是多少_Java_Assignment Operator_Post Increment - Fatal编程技术网

Java 在{a=5;a=a+;+;;Syso(a)}之后,a的值是多少

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增

运行这个程序后,我得到的“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增量中,返回增量之前的值,然后执行增量。此行将获得相同的结果
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