Java中的自增操作符与中间缓存变量机制
来源:互联网 发布:pc游戏优化不好 编辑:程序博客网 时间:2024/06/05 02:06
我们来看这样一段程序:
[java]
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);
}
它的运行结果是:
[java]
sum1=1
sum2=3
而我用c语言编写相同逻辑的代码得到的却是不同的结果:
[cpp]
void main()
{
int i,sum1,sum2;
i=0;
sum1=(i++)+(i++);
printf("sum1=%d\n",sum1);
i=0;
sum2=(++i)+(++i);
printf("sum2=%d\n",sum2);
getchar();
}
它的运行结果是:
[cpp]
sum1=0
sum2=4
这种不同是因为在c语言中,每个变量在它的生命周期内的每个时间点都只能有一个唯一的值。因此变量在每一次自增运算时,变量所对应内存区域的内容就被重写了。
而在java中,执行sum1=(i++)+(i++);创建了2个临时的整型变量对象,对来存储每次自增运算的结果。
java采用了这种中间缓存变量的机制。
再看程序员面试宝典中一个很经典的例子:
[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++语句看以分解成如下操作:
[java]
temp = j;
j = j + 1;
j = temp;
个人觉得这样使用自增并不好,应该在复杂语句中避免使用后置的自增(自减)。
另外,值得注意的是某些采用了中间缓存变量机制的语言,输出并不一定是0。比如C++在对一些基本类型以及指针类型进行后置自增操作时,编译器将省去中间缓存变量的操作。
- Java中的自增操作符与中间缓存变量机制
- Java中的自增操作符与中间缓存变量机制
- Java中的自增操作符与中间缓存变量机制
- Java中的自增操作符与中间缓存变量机制
- 关于java的自增操作符与中间缓存变量机制
- Java的中间缓存变量机制与自增操作符
- 关于自增运算符和java的中间缓存变量机制
- Java中间变量缓存机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java中间缓存变量机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java 中间缓存变量机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java中间缓存变量机制
- 【java学习笔记】java中的中间缓存变量机制
- 总结零散的小知识
- UNIX常用命令个人总结
- 文件读写操作(CxImage库)(文件包括File和内存数据)
- AS3中的TextField文本事件
- Android实现数据存储技术
- Java中的自增操作符与中间缓存变量机制
- 山东举报食安犯罪者最高可奖励30万-山东-食品犯罪
- linux系统下,11款常见远程桌面控制软件
- Windows xp
- KMThreadPool: 4 – Thread Pool Step 2: SettingUp the Threads
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
- arm 汇编 跑马灯
- MYSQL 主从同步配置
- KMThreadPool: 5 – Thread Pool Step 3:Enter Thread Pool