【每日一文】一段有趣的Java代碼

圖片與內(nèi)容無關

呵呵, count 等于幾?

public static void main(String args[]){ 
   int count = 0;    
   for (int i = 0; i < 10; i++){       
        count = count ++;    
   }    
    System.out.print("count:"+count);
}

這段程序說出的是多少呢?
是不是 count 自加10 ,答案等等于10嗎?
可是我可以非??隙ǖ母嬖V你,答案錯誤!運行結果是count 等于 0。
** why? **

count ++ 是一個表達式,是有返回值的,它的返回值就是 count 自加前的值,Java 對自加是這樣處理的:首先把 count 的值(注意是值,不是引用)拷貝到一個臨時變量區(qū),然后對 count 變量加 1,最后返回臨時變量區(qū)的值。程序第一次循環(huán)時的詳細步驟如下:
** 步驟1** JVM 把 count 值(其值是0)拷貝到臨時變量區(qū)。
步驟2 count 值加 1,這時候 count 的值 是 1。
** 步驟3** 返回臨時變量區(qū)的值,注意這個值是 0 ,沒修改過。
步驟4 返回值賦值給 count,此時 count 值被重置成 0。
“count = count ++” 這條語句可以按照如下代碼來理解:

  public static int add(int count){
        //先保存初始值
        int temp = count;
        //做自增操作
        count = count + 1;
        //返回原始值
        return temp;
    }

于是第一次循環(huán)后 count 的值還是 0 ;其他 9 次的循環(huán)也是一樣的,最終你會發(fā)現(xiàn) count 的值始終沒有改變,仍然保持著最初的狀態(tài)。
此例中代碼的作者的本意是希望 count 自增,所以想當然低認為賦值給自身就成了,不曾想掉到 Java 自增的陷阱中了。解決方法很簡單,只要把 “count = count ++” 修改為 “count ++”即可。該問題在不同的語言環(huán)境有不同的實現(xiàn): C++ 中 “count = count ++” 與 “count ++” 是等效的,而在 php 中則保持著與 Java 相同的處理方式。每種語言對自增的實現(xiàn)方式各不同,讀者感興趣可以找?guī)追N語言測試一下,思考下原理。
正確的代碼貢獻于此:

public static void main(String args[]){    
      int count = 0;   
      for (int i = 0; i < 10; i++){       
           count ++;    
       }    
       System.out.print("count:"+count);
 }

哈哈,下次如過你在某大街上看到某人的T恤上印著 i = i++,千萬別小看他,說不定就是大神。說到這里了,呵呵,還不趕緊去裝個逼!??!

總結:
基礎很重要,任何時候不要覺得自己很牛逼,時刻告誡自己需要學習的還有很多,在你感覺自己很滿足的時候請你回頭看看你曾經(jīng)丟下的看不起的基礎知識,看看你是否能真正的理解呢!

本文思路來自讀:《編寫高質量代碼之Java》所感所悟,寫此時刻警醒自己,學習永無止境?。?!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容