Java中的自增操作符与中间缓存变量机制
作者:网络转载 发布时间:[ 2012/9/19 9:51:25 ] 推荐标签:
我们来看这样一段程序:
public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i); System.out.println("sum2="+sum2); } |
它的运行结果是:
sum1=1 sum2=3 |
而我用c语言编写相同逻辑的代码得到的却是不同的结果:
void main()
i=0;
i=0;
getchar(); |
它的运行结果是:
sum1=0 sum2=4 |
这种不同是因为在c语言中,每个变量在它的生命周期内的每个时间点都只能有一个的值。因此变量在每一次自增运算时,变量所对应内存区域的内容被重写了。
而在java中,执行sum1=(i++)+(i++);创建了2个临时的整型变量对象,对来存储每次自增运算的结果。
java采用了这种中间缓存变量的机制。
再看程序员面试宝典中一个很经典的例子:
public static void main(String[] args){ int j = 0; for(int i = 0; i < 100; i++) j = j++; System.out.println(j); } |
对java来说,j的输出值是0。
因为java的中间缓存变量机制使j=j++语句看以分解成如下操作:
temp = j; j = j + 1; j = temp; |
个人觉得这样使用自增并不好,应该在复杂语句中避免使用后置的自增(自减)。
另外,值得注意的是某些采用了中间缓存变量机制的语言,输出并不一定是0。比如C++在对一些基本类型以及指针类型进行后置自增操作时,编译器将省去中间缓存变量的操作。
相关推荐
更新发布
常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11系统性能测试及调优前期准备
2021/4/15 14:41:29国内比较好用的5款测试管理工具
2021/3/25 17:23:31