【尚硅谷】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虚拟机规范》关于指令的部分