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=4 j=1 k=11
解:int i=1,i=i++ 赋值过程 :i=1-->i=i++,i先压入操作数栈中为1,i++ 自增+1 ,i局部变量为2,操作数栈为1 又赋值给i 。
int j=i++ 赋值过程:把i压入操作数栈为1,i++ 自增 +1 int i=2局部变量 ;操作数栈赋值给了j,所以j等于1
int K=i+ ++i *i++ 赋值过程:i 现在等于2,把2压入操作数栈中,++i 先自增 +1 ,i=3,把3压入操作数栈中,i++ 先把i压入操作数栈中为3 ,再自增i=4,那么现在操作数栈中 2+3*3=11赋值给K。
总结:
赋值最后计算,等于右边的从左到右加载值依次压入操作数栈,实际算哪个看运算符,自增自减直接修改变量的值,不经过操作数栈,赋值之前,临时结果也在操作数栈中