先看代碼
public class Test {
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);
}
}
我們根據(jù)代碼逐行分析:
- i=i++; i++需要先把i值壓入操作數(shù)棧频敛,然后值自增银择,把i值壓入操作數(shù)棧后為1邮旷,局部變量自增1則為2。然后再把操作棧的數(shù)賦值給i伏伯,則的值為1
- int j = i++; 把值壓入操作數(shù)棧橘洞,則為1,然后自增1说搅,則i的局部變量為2炸枣,再把操作數(shù)棧中的值付給j則j值為1
- int k = i + ++i * i++;對于操作數(shù)棧還應(yīng)從左往右開始,則i的局部變量為2弄唧,int k = 2+ ++i * i++适肠,接下來++i為自增不需要壓入操作數(shù)棧所以int k = 2 +3i++,這時i的局部變量為3候引,i++ 先把 i 的值壓入操作數(shù)棧然后再付給i侯养,則int k = 2+33,則k的值為11
輸出結(jié)果為
i= 4
j=1
k=11