程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> int i=0;i=i++;i=?//簡單問題背後的不簡單道理

int i=0;i=i++;i=?//簡單問題背後的不簡單道理

編輯:關於JAVA
大家可以在不運行的情況下得出這個問題的答案嗎?可能你會不加思索地說答案是1,當初我也是這麼認為的,可是運行的結果讓我很吃驚,0! 為什麼會這樣呢? 下面我們對比兩段程序和它們的匯編代碼(javap -c xxx得到): int i=0; i=i++; int i=0; i=++i; ------------------------------------------------------------------------------------ 0: iconst_0 0: iconst_0 1: istore_2 1: istore_2 2: iload_2 2: iinc 2, 1 3: iinc 2, 1 3: iload_2 4: istore_2 4: istore_2 5: return 5: return 它們區別在於2,3兩句。 從優先級來看 "前++" >" =" > "後++",所以匯編代碼清楚地顯示了代碼執行地過程。 第二段代碼地結果是1,沒有問題。 從匯編代碼來看,=賦值地過程是先利用臨時變量計算=右邊地值,然後在賦給左邊地變量。 這樣,我們就很容易解釋第一段代碼地運行結果了: 臨時變量先得到i原來地值是0(匯編代碼1),這時候考慮優先級,=大於後++,所以臨時變量就執行賦值操作,之後臨時變量先讀出i地值(匯編代碼2),再進行++操作(匯編代碼3),但是++操作只是在臨時變量自己身上加一,不會影響原來地i值。 按照上面地思路再分析第二段代碼,也就順理成章了:) 總結:Java中的=操作由臨時變量計算結果,然後再賦回原變量,由於優先級問題就會出現意想不到的結果,仔細分析流程就能得出結果。論壇原貼:http://community.csdn.Net/Expert/TopicVIEw3.ASP?id=3885309感謝:blackhost(劍心),kingfish(八百裡秦川@龍城異客)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved