看到一篇有趣的面试题:
public class demo {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++) {
j = j++;
}
System.out.println("j= " + j);
}
}
初始化变量 j = 0;
然后循环100次,在循环内进行 j = j++操作,请问最后输出 j 的值是多少?
看了一眼,第一反应没经过脑子就想到了100,然后去调试运行了一下,妥妥的错了。 答案是:
答案是0.。。。。。。
直接开始解释吧:
1、在Java中,在其做++或者--操作时候,会给该变量分配一个内存空间,用来存储 原始的该变量对象的值,在这里保存的是 j = 0; 另外一个内存空间进行++或者--运算。因此现在是两个内存空间,一个用来存储原始变量的 j=0 空间1,另外一个是用来进行++或者--计算的 空间2;
2、当变量做完++或者--操作后,空间2(即++或者--操作)内存将被释放
3、因此 j = j++后,j++后该计算内存空间被释放了,因此还是取原始的值 j = 0的值;
4、所以 j = j++最后的值 就是 0,无论循环多少次都一样。
可以做一个改变:
public class demo {
public static void main(String[] args) {
int j = 0;
int x = 0;
for (int i = 0; i < 100; i++) {
x = j++;
j = x;
}
System.out.println("j= " + j);
}
}
用上面代码进行debug断点调试,会发现:
1、循环中,执行完 x = j++后, j的值变为了1 , 而 x 值反而 还是0,
2、因此 j = x;结果还是0
3、所以呢,我们从x = j++;这个操作中可以看出,j++后,并没有给 x 运算后的值1,反而是原始的值 0 ,所以验证了我上面的说法(将int j = 100,x将为100)
建议:
1、做++或者--操作时候,还是希望能够进行一个单独的一个操作,不要用变量来做赋值运算
更多精彩敬请关注公众号
Java极客思维
微信扫一扫,关注公众号