码迷,mamicode.com
首页 > 其他好文 > 详细

关于j = j++在循环中执行的问题

时间:2020-01-10 10:30:50      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:java   nbsp   运算   关于   优先级   机制   原因   问题   输出   

经常有这样一个问题:

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

关于j = j++在循环中执行的问题

标签:java   nbsp   运算   关于   优先级   机制   原因   问题   输出   

原文地址:https://www.cnblogs.com/yxlaisj/p/12174658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!