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