自增变量
现有如下代码,问输出的结果为多少?
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);
}
这道题我一开始做的时候,也是信心满满,结果一看答案还是翻车了……
这也证明了自己的基础知识还不够扎实,就像修房子一样,下层基建不搞好,高楼大厦是造不起来的。
沉下心来,确定方向,继续努力。
接下来,让我记录下这道题的解答思路
如果有错误之处,希望各位大佬帮忙指出
1.i = i++
i++解释,因为++在i的后面,所以要先做运算,然后再自身+1,
a.int i = 1
局部变量值 -->int i = 1
操作数栈 --> null
b.把i的值, i++中的i,压入操作数栈中,++运算后面再计算
局部变量值 -->int i = 1
操作数栈 --> 1
c.现在开始++计算,i的局部变量值自增1,也就是+1;
局部变量值 -->int i = 2
操作数栈 --> 1
d.以上的运算是计算的 i = i++中,i++的值,这步进行赋值操作;
把操作数栈中的值赋值给局部变量值
局部变量值 -->int i = 1
操作数栈 --> null
2.int j =i++
a.由上条语句已知,int i = 1,并且也是i++,先把i的值压入到操作数栈,再进行自增;
局部变量值 -->int j = null
操作数栈 --> 1
b.进行j的赋值,并且i进行++运算,自身+1
局部变量值 -->int j = 1
操作数栈 --> null
局部变量值 --> int i = 2
3.int k = i + ++i * i++
用我自己的理解解释一下这条语句:
i的局部变量值+1 乘以 i的局部变量值,再加上i的局部变量值 ,然后再把得出的结果,赋值给变量k;
运算完成后,i的局部变量值再+1;
a.用上面的思路解决这条语句,知道i的局部变量值为2,int k = 2+ ++i * i++; 再计算++i,++再变量的前面,先自身局部变量+1,i的局部变量值就变成了3。再进行运算 --> int k = 2 + 3 * 3++; int k = 11;
此时
1.局部变量值 -->int j = 1
2.int k = 11
操作数栈 --> 1
局部变量值 --> int i = 3
b.k的赋值运算完成后,i再自增,i+1,i的局部变量值就为4;
最终输出结果为:
1.局部变量值 -->int j = 1
2.int k = 11
操作数栈 --> null
局部变量值 --> int i = 4
坚持下去,总有一天,再小的火种也会形成出燎原之势。