视频讲解

【尚硅谷】Java大厂高频面试题(第一季)

自增变量

写出下面输出结果并分析。

public static void main(String[] args) {
	int i= 1;
	i= i++;
	int j= i++;
	int k= i + ++i * i++;
	System.out.println("i=" + i); .
	System.out.println("j=" + j);
	System.out.println("k=" + k); .
	
}

字节码查看

解析i++

int i =1 将1存入局部变量表i=1



解析j=i++

同i++,j=1

这次因为赋值操作给了j,所以1就赋值给了j,所以这次i就变为了2

解析k= i + ++i * i++


右边先遇到i,那么i的值先进入操作数栈

++i计算,加加在前会先把i变成3

然后将3压入操作数栈

然后遇到了i++,i++先把i的值压入栈

然后i再次进行自增变为4

然后进行乘法运算



小结

●赋值= ,最后计算
●=右边的从左到右加载值依次压入操作数栈
●实际先算哪个,看运算符优先级
●自增、自减操作都是直接修改变量的值,不经过操作数栈
●最后的赋值之前,临时结果也是存储在操作数栈中
●建议:《JVM虚拟机规范》关于指令的部分