您的位置:首页 > 编程语言 > Java开发

JAVA问题分析——i = i++

2020-08-30 21:06 148 查看

在Java中,++属于自加运算符,如果++放在变量后面,先进行赋值或输出操作,再进行自加。根据以上结论,我们来分析一下以下代码的返回结果:

public class Test {
public static void main(String[] args) {
int i = 1;
i = i++;
System.out.println(i);
}
}

很多人认为输出结果应该为2,但是最后的输出结果为1:

想直到这是为什么,首先我们应该来了解一下Java简单的内存结构。
JVM虚拟机内存结构主要分为3个部分:栈内存,堆内存,和方法区。
所有局部变量的值,在内存分析的时候,都被放入了栈中。
每一个方法对应一个栈帧,每一个栈帧里面都包括:局部变量表,操作数栈,动态链接,方法出口,还有其它,如图所示:


了解了java简单的内存结构,我们来分析一下i = i++在内存中是如何来操作的:
首先,main方法对应一个栈帧,int i = 1,i = 1被放在了栈帧中的局部变量表里面。
因为++在后面,所以i先进栈,后自加。i = 1进入到操作数栈里面。局部变量表里面i进行了自加。
i = i++,操作数栈里面的值又重新赋给了局部变量表里面的i,所以i = 1。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: