众所周知,JVM运行时数据区域由方法区、虚拟机栈、本地方法栈、堆、程序计数器这些区域构成,那么你真的理解了吗,我这里分享一下i++这个东西在JVM底层实现的的问题,希望对你有帮助。
程序一:
public class Test1 { public static void main(String[] args) { int i = 8; i = i++; System.out.println(i); } }
大家想一下这个程序的输出结果是什么,有人说是8,有人说是9,当我们运行结果以后发现结果是8。Why? 为什么?我们先从这段程序的JVM指令上分析一下。
获得这段程序的指令如下所示:
0 bipush 8 2 istore_1 3 iload_1 4 iinc 1 by 1 7 istore_1 8 getstatic #2 <java/lang/System.out> 11 iload_1 12 invokevirtual #3 <java/io/PrintStream.println> 15 return
这些指令的相关含义可以从如下地址获取: Chapter 6. The Java Virtual Machine Instruction Set 正