J2SE常见问题分析

来源:互联网 发布:软件开发保密协议书 编辑:程序博客网 时间:2024/06/06 00:20

发现下面代码输出还是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未被执行
0 0