Java自加(i++)的所谓缓存变量
2014-03-25 11:50
204 查看
在面试书上看到一个非常变态的面试题,考的是Java的后自加(j++)操作。
1, int j = 0 开辟一个内存A,赋值为0;
2, 开辟一个内存B,赋值为内存A的值(0);
3, 内存A的值加1;
4, 把内存B的值赋给内存A。
所以,输出结果是0.
再来一个,
1, int j = 0 开辟一个内存A,赋值为0;
2, 开辟一个内存B,赋值为内存A的值(0);
3, 内存A的值加1(1);
4, 开辟一个内存C,赋值为内存A的值(1);
5, 内存A的值加1(2);
6, 开辟一个内存D,赋值为内存A的值(2);
7, 内存A的值加1(3);
8, 将 B+C+D 的值给内存A。
因此,结果为3.
注意,这个只是后加的情况。
我想说,这样的题真的没有什么实际意义。
public static void main(String[] args){ int j = 0; for(int i=0; i<100; i++){ j = j++; } System.out.println(j); } 运行结果是0.首先简化一下问题:
public static void main(String[] args){ int j = 0; j = j++; System.out.println(j); } 运行结果是0.单独抽出这两句:
int j = 0; j = j++;
1, int j = 0 开辟一个内存A,赋值为0;
2, 开辟一个内存B,赋值为内存A的值(0);
3, 内存A的值加1;
4, 把内存B的值赋给内存A。
所以,输出结果是0.
再来一个,
int j = 0; j = j++ + j++ + j++;
1, int j = 0 开辟一个内存A,赋值为0;
2, 开辟一个内存B,赋值为内存A的值(0);
3, 内存A的值加1(1);
4, 开辟一个内存C,赋值为内存A的值(1);
5, 内存A的值加1(2);
6, 开辟一个内存D,赋值为内存A的值(2);
7, 内存A的值加1(3);
8, 将 B+C+D 的值给内存A。
因此,结果为3.
注意,这个只是后加的情况。
我想说,这样的题真的没有什么实际意义。