(局部变量表、操作数栈)当我们在执行i=i++及i++时,底层到底在执行什么?

遇到一个比较有意思的题目,看上去很简单,实际运行起来却不是那么回事了。会发现i=i++和i++两者运行结果居然不一样!
主要是没理解清楚java方法执行时,局部变量和操作数栈的分配运行机制,这就分享给大家分析过程:
示例代码如下,执行结果应该是:
1
0

public class AutoIncrement {
    
    
	public static void main(String[] args) {
    
    
		int i = 0;
		i++;//相当于i=i+1;
		/*
		步骤说明:
		1、将局部变量i的值0 load到操作数栈
		局部变量  i=0
		操作数栈  0
		2、将局部变量i的值自增1
		局部变量  i=1
		操作数栈  0
		3、将操作数栈i的值弹出,但是并没有赋值操作
		局部变量  i=1
		操作数栈  
		*/
		System.out.println(i);//i=1
		
		int j = 0;
		j=j++;
		/*
		步骤说明:
		1、将局部变量j的值0 load到操作数栈
		局部变量  j=0
		操作数栈  0
		2、将局部变量j的值自增1
		局部变量  j=1
		操作数栈  0
		3、将操作数栈j的值0弹出,并赋值给局部变量j(*故虽然j的值曾经的确加1了,但是又被这一步骤的0覆盖了*)
		局部变量  j=0
		操作数栈  
		*/
		System.out.println(j);
	}

猜你喜欢

转载自blog.csdn.net/u010425839/article/details/115220038
i++