int count =0;
for(int i=0;i<10;i++){
count=count++;
}
System.out.PRintln("count="+count);
} 運(yùn)行結(jié)果是 count 等于 0。 為什么呢? count++ 是一個(gè)表達(dá)式, 是有返回值的, 它的返回值就是 count 自加前的值, java 對(duì)自加是這樣處理的 : 首先把 count 的值( 注意是值, 不是引用) 拷貝到一個(gè)臨時(shí)變量區(qū), 然后對(duì) count 變量加 1, 最后返回臨時(shí)變量區(qū)的值。 程序第一次循環(huán)時(shí)的詳細(xì)處理步驟如下: 步驟 1 JVM 把 count 值( 其值是 0) 拷貝到臨時(shí)變量區(qū)。 步驟 2 count 值加 1, 這時(shí)候 count 的值是 1。 步驟 3 返回臨時(shí)變量區(qū)的值, 注意這個(gè)值是 0, 沒修改過。 步驟 4 返回值賦值給 count, 此時(shí) count 值被重置成 0。“count=count++”這條語句可以按照如下代碼來理解:public static int mockAdd(int count){
// 先保存初始值
int temp =count;
// 做自增操作
count = count+1;
// 返回原始值
return temp;
} 于是第一次循環(huán)后 count 的值還是 0, 其他 9 次的循環(huán)也是一樣的, 最終你會(huì)發(fā)現(xiàn) count的值始終沒有改變, 仍然保持著最初的狀態(tài)。 解 決 方 法 很 簡(jiǎn) 單, 只 要 把“count=count++” 修 改 為“count++” 即 可。 該 問 題 在 不 同 的 語 言 環(huán) 境 有 不 同 的 實(shí) 現(xiàn) : C++ 中“count=count++” 與“count++”是等效的, 而在 php 中則保持著與 Java 相同的處理方式。 每種語言對(duì)自增的實(shí)現(xiàn)方式各不同, 讀者有興趣可以多找?guī)追N語言測(cè)試一下, 思考一下原理。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注