reupe

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

经常有这样一个问题:

int j;

for(int i = 0; i < 1000; i++){

  j = j++;

}

System.out.println(j);  // 输出0

 

为什么无论循环多少次,j都为0?

 

原因有两点:

1.  对于j++, java会使用中间缓存机制,先把j记到缓存

2.  "++"运算符,优先级要高于"="

 

基于以上两点,j = j++执行过程可以拆解为:

1.  java使用中间变量,暂存j的值: int tmp = j;

2. "="右边的j做自增: j = j + 1,此时j变为1

3. 自增完成后,进行"="赋值操作,注意,这个时候赋值赋的是tmp:  j = tmp,  而tmp=0所以,最终j = 0

 

问题:如果使用j = ++j会如何?

 

答案会是是100, 因为++j会先把自增后的结果赋值给中间变量,假设j=0,      j = ++j可以拆解为:

1.  j = j + 1;          // 此时j = 1

2. int tmp = j;     // 此时tmp = 1

3. j = tmp;       // 此时j = 1

posted on 2020-01-10 09:52  yxlaisj  阅读(497)  评论(0编辑  收藏  举报