发现下面代码输出还是i=0,觉得很奇怪。于是利用"javap -c -l -v Foo"分析"i=i++", "i=++i"和"i++", "i+=1"。
"i=i++"的输出:估计在缓冲中有一份copy,istore时又写回i变量中。
int i = 0; i = i++; //output i=0
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: istore_1
"i=++i"的输出:
int i = 0; i = ++i; //output i=1
0: iconst_0
1: istore_1
2: iinc 1, 1
5: iload_1
6: istore_1
"i++"和"i+=1"编译后代码是一样的。
int i = 0; i++; 或 i += 1; //output i=1
0: iconst_0
1: istore_1
2: iinc 1, 1
int k=3; if (k--==3 && k++==3) //false, 但(k--==3 && k++==2)为true
0: iconst_3
1: istore_1
2: iload_1
3: iinc 1, -1
6: iconst_3
7: if_icmpne 26
10: iload_1
11: iinc 1, 1
14: iconst_3
15: if_icmpne 26
int k=3; if (k++==3 || ++k==5) System.out.println(k); //结果k=4,因为++k==5未被执行