标签: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
标签:java nbsp 运算 关于 优先级 机制 原因 问题 输出
原文地址:https://www.cnblogs.com/yxlaisj/p/12174658.html