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

來源:互聯網
上載者:User
問題     大家可以在不啟動並執行情況下得出這個問題的答案嗎?可能你會不加思索地說答案是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(八百裡秦川@龍城異客)            

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。