本帖最后由 刘云龙 于 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. 后边的例子,也是同样的思路.
这是我的一些总结,大家可以验证一下,如有错误,也希望大家能够指出. |