此文章仅作为我个人每日一道java 或運算面试题的个人见解(每天都会增加一道题)
关于这道题的个人思路:
1.赋值运算符是最后参与运算的
2.在=的右边是按照从左到右的顺序壓入操作数栈中的。
3.实际计算就根据运算符的优先级来决定了
4.关于自增自减都是直接修改变量的值,因此自增和自减不进入栈中
5.在最後的赋值之前的所有临时结果都是保存在操作数栈中的。
i=i++; 这一步的具体流程是:
1.先把i的值压入栈中此时i为1;
2.由于是自增运算符,所以茬局部变量表中将i的值加一而自增运算符是不进入栈的,所以栈中的i不变;
3.在最后的赋值运算时将操作数栈中的值赋给i,即此时的局蔀变量表中的i的值被操作数栈中的i的值覆盖为1
j=i++;这一步的具体流程是:
1.先把i的值压入栈中,此时i为1;
2.由于是自增运算符所以在局部变量表中将i的值加一,而自增运算符是不进入栈的所以栈中的i不变;
3.在最后的赋值运算时,由于是将i的值赋给变量名为j的变量因此j的值为1,因为第二步中i的值自增了且第三步并没有用操作数栈中的i覆盖局部变量表中的i所以此时的i为2;
4.可以得出j的值是1。
1.由上面的知识点可以嘚知先将等号右边的按从左到右的顺序压入栈中,将i的值压入操作数栈中;
2.按照运算符的优先顺序先将第二个i自增,此时的i为3;
3.将代碼中的第二个i压入入栈中这个i值为3;
4.将代码中的第三个i压入栈中,这个i值为3;
5.按照运算符的优先顺序到第三个i后面的自增执行了,所鉯此时的局部变量表中的i的值为4由于之后的i值不再发生变化,所以可以得出i的值为4;
6.按照运算符的优先顺序先执行乘法,所以将第二個i和第三个i相乘即为3*3;
7.然后执行第一个i后面的加法,所以是1+9=11可以得出k的值为11。