黑马程序员技术交流社区
标题:
++,--
[打印本页]
作者:
宁少
时间:
2015-10-31 12:32
标题:
++,--
有这样一段代码
1 int a=1;
2 a=(4+(a++));
3 System.out.println(a);
输出结果为5,而不是2或者6。自增操作在赋值操作之前,而不是之后。
同理,语句a=a++;执行完成之后,a的值不会发生变化,而不是原来想像的自增1。
下面解释运行机制:
这段代码对应的Java字节码为:
1 iconst_1
2 istore_1
3 iconst_4
4 iload_1
5 iinc #1 #1
6 iadd
7 istore_1
解释:
1~3行是声明变量a并赋值,并声明常量4
4行,把a的值载入(存入一个临时地方);
5行,通过一个指令iinc,实现a的自增1,并把新的结果存入原地点;
6行,完成加法,关键在于,此处使用的a的值是第4行load进来时的值,而不是第5行完成自增操作后的值;
7行,把存入结果a
所以,自增操作发生在istore操作之前,所以最终a的值为5;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2