黑马程序员技术交流社区
标题: 自加自减的工作原理 [打印本页]
作者: 刘云龙 时间: 2013-3-7 22:15
标题: 自加自减的工作原理
本帖最后由 刘云龙 于 2013-3-7 22:21 编辑
- class PlusPlus
- {
- public static void main(String[] args)
- {
- int a = 2;
- int b = (a++) + 3 * a;//打印11
- //int b = 3 * a + (a++);
- System.out.println(b);
- int i = 3,k1,k2;
- k1 = (i++)+(i++)+(i++);
- i = 3;
- k2 = (++i)+(++i)+(++i);
- System.out.println(k1);//打印12
- System.out.println(k2);//打印15
- }
- }
复制代码分析上面的例子:
在java中自增运算的过程,也体现了其面向对象的思想.在变量的自增运算中,变量有一个隐式的运算过程.对于前缀自增(++i),可以看做java直接将变量加1,然后再进行其他运算,这个相当简单.而对于后缀自增(i++),java是这样处理的:
首先,会拷贝变量的一个副本到一个临时变量区;
然后,拿这个临时变量区的值,也就是自增之前的值,去运算;
同时,原来变量区的值加1,并准备下次运算.
这里隐藏了3个小的步骤.
在上边的例子中,语句b = (a++) + 3 * a;的执行过程实际是这样的:
1.拷贝变量a的一个副本,到一个临时的变量区;
2.然后,拿这个临时变量区里的值,也就是2,去运算;此时,b = 2 + 3 * a;
3.同时,变量a在原来的变量区中的值加1;此时,a的值为3;
4.a自增之后,参见下面的运算,即,b = 2 + 3 * 3;
5.最后,计算出b的值为11.
后边的例子,也是同样的思路.
这是我的一些总结,大家可以验证一下,如有错误,也希望大家能够指出.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |