public static void main(String[] args) {
int count =0;
for(int i=0;i<10;i++){
count=count++;
}
System.out.println("count="+count);
}
運行結果是 count 等於 0。 爲什麼呢?
count++ 是一個表達式, 是有返回值的, 它的返回值就是 count 自加前的值, Java 對自加是這樣處理的 : 首先把 count 的值( 注意是值, 不是引用) 拷貝到一個臨時變量區, 然後對 count 變量加 1, 最後返回臨時變量區的值。 程序第一次循環時的詳細處理步驟如下:
步驟 1 JVM 把 count 值( 其值是 0) 拷貝到臨時變量區。
步驟 2 count 值加 1, 這時候 count 的值是 1。
步驟 3 返回臨時變量區的值, 注意這個值是 0, 沒修改過。
步驟 4 返回值賦值給 count, 此時 count 值被重置成 0。
“count=count++”這條語句可以按照如下代碼來理解:
public static int mockAdd(int count){
// 先保存初始值
int temp =count;
// 做自增操作
count = count+1;
// 返回原始值
return temp;
}
於是第一次循環後 count 的值還是 0, 其他 9 次的循環也是一樣的, 最終你會發現 count的值始終沒有改變, 仍然保持着最初的狀態。
解 決 方 法 很 簡 單, 只 要 把“count=count++” 修 改 爲“count++” 即 可。 該 問 題 在 不 同 的 語 言 環 境 有 不 同 的 實 現 : C++ 中“count=count++” 與“count++”是等效的, 而在 PHP 中則保持着與 Java 相同的處理方式。 每種語言對自增的實現方式各不同,
讀者有興趣可以多找幾種語言測試一下, 思考一下原理。