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。
相关文章推荐
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- 中文化和国际化问题权威解析之三:Java中文问题分析
- Java 编程技术中汉字问题的分析及解决
- Java中汉字问题的分析及解决
- 分析Java中乱码问题产生的根
- 深入分析 Java 中的中文编码问题
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- 中文化和国际化问题权威解析之三:Java中文问题分析
- 出现java.lang.UnsupportedClassVersionError: Bad version number in .class file问题的解决方法分析
- Java技术平台中文处理问题分析及解决方案
- 深入分析 Java 中的中文编码问题
- Java访问数据库的速度瓶颈问题的分析及解决
- 分析Java应用程序中的问题
- Java内存泄露问题分析
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- 关于Java中文问题的几条分析原则