int i=0,a=0;
a=i++;
0: iconst_0 //0 入栈 (从常量池中 取出0,放入栈中)
1: istore_1 //0 出栈,放到 变量i中
2: iconst_0
3: istore_2
4: iload_1 //将变量i的值入栈,
5: iinc 1, 1 //变量i加1.
8: istore_2 //变量i的值出栈,赋给a
5和8即是所谓的先用后加。其实,还是正常的顺序,用的i是 没进行运算之前的i.
=====================================================
int i=0,a=0;
a=++i;
0: iconst_0
1: istore_1
2: iconst_0
3: istore_2
4: iinc 1, 1
7: iload_1
8: istore_2
4和7是先加后 。
=======================================================
还是看 i和++符号的先后顺序 :i是没加之前入栈,还是加了之后再入栈。
入栈就是参与运算。(因为有赋值符号)
=================================================
int i=0;
i=i++ + ++i;
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: iinc 1, 1
9: iload_1
10: iadd //栈中弹出两个值,相加,入栈
11: istore_1
=============================================
int i=0;
i=++i + ++i;
0: iconst_0
1: istore_1
2: iinc 1, 1
5: iload_1
6: iinc 1, 1 //变量域i,再加1
9: iload_1
10: iadd
11: istore_1
=======================================
总结:在赋值表达式中,遇到 i : 入栈,
遇到 ++ : 变量i说在的空间值加1.
=======================================
最后总结:
赋值语句:借助 “栈” 来完成
++: 是”变量域“的加。
两者没有关系。