上题回顾与解析
public static void main(String[] args) {
int j = 0 ;
for (int i = 0; i < 100 ; i++) {
j = j++;
}
System.out.println(j);
}
输出什么
答案是0
考点:自增自减运算符 你是不是一看到就喊"100",真的这么简单么 其实没这么简单
解析:
j++
是后缀式自增,先使用再计算
所以显然,当i = 0
时,j = j++
相当于j = 0
那,当i>0时,为啥j还是0?执行了j++
却没效果?(我也被这个弄晕了)
其实是这样的,在java中,当编译器遇到自增自减运算符时,会开辟一个新的内存空间(中间缓存变量)存储,最后运算完后,返回这个变量的值
j++
的实现代码其实是这样的:
//temp为缓存变量
int temp = j;
j = j + 1;
return temp;
即j++ == j(自增前的)
那么j = j++
相当于j = j
,所以j一直是0
若把j++
换成++j
呢?那输出就是100了
++j
的实现代码相当于:
//temp为缓存变量
int temp = j + 1;
j = j + 1;
return temp;
Get到了么?
再来几道