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

Posted yxlaisj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于j = j++在循环中执行的问题相关的知识,希望对你有一定的参考价值。

经常有这样一个问题:

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++在循环中执行的问题的主要内容,如果未能解决你的问题,请参考以下文章

循环语句

在for循环头中使用逻辑运算

博客作业2---线性表

关于基于硒中的for循环中的匹配条件执行一些动作

while循环如何迭代?

java中for循环执行过程