1. 程式人生 > >Java自加(i++)的所謂快取變數

Java自加(i++)的所謂快取變數

在面試書上看到一個非常變態的面試題,考的是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.

注意,這個只是後加的情況。

我想說,這樣的題真的沒有什麼實際意義。