i、j、k分別是多少
public static void main(String[] args) {
int i = 1;
i = i++;
int j = i++;
int k = i + ++i + i++;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
分析過(guò)程
i = i++;
- 將i=1壓入操作數(shù)棧
- 將局部變量i自增成2
- 將操作數(shù)棧內(nèi)的1賦值給變量i
int j = i++;
- 將i=1壓入操作數(shù)棧
- 將局部變量i自增為2
- 將操作數(shù)棧中的1賦值給j
int k = i + ++i + i++;
- 將i=2壓入操作數(shù)棧
- 將局部變量i自增成3
- 將3壓入操作數(shù)棧
- 將3再次壓棧
- 將局部變量i自增成4
- 進(jìn)行3*3運(yùn)算,將結(jié)果壓棧
- 計(jì)算9+3壓棧
- 將11賦值給k
總結(jié)
- 賦值最后計(jì)算
- =右邊從左到右加載依此壓入操作數(shù)棧
- 實(shí)際運(yùn)算看運(yùn)算符優(yōu)先級(jí)
- 自增、自減直接修改局部變量到值,不經(jīng)過(guò)操作數(shù)棧
- 最后賦值之前,臨時(shí)結(jié)果也是存儲(chǔ)在操作數(shù)棧中