在面试书上看到一个非常变态的面试题,考的是Java的后自加(j++)操作。
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.
注意,这个只是后加的情况。
我想说,这样的题真的没有什么实际意义。