學java必須搞懂這道計算題

分享一道經典的Java計算題,分享的同時也幫助基礎薄弱的自己進一步加深理解:

 

附上代碼:

package com.java_foundation.arithmetic;

public class ClassicalCalculation_1 {
    public static void main(String[] args) {
        int i = 1;
        i = i++;
        int j = i++;
        int k = i+ ++i * i++;
        System.out.println("i="+i);
        System.out.println("j="+i);
        System.out.println("k="+i);
    }
}

可以先自己想一下輸出的是什麼 ?

 

idea打開ViewàShow ByteCode,查看下字節碼指令,通過字節碼來分析它的整個運行流程,這裏我大致分析了下過程,總結了爲下圖。

 

 

輸出:

i=4

j=1

k=11

 

小結:

1、賦值=是最後計算的

2、=號右邊的從左到右加載值依次壓入操作數棧

3、實際先算哪個需要根據運算符的優先級來判定

4、自增、自減操作都是直接修改變量的值,不經過操作數棧,這裏是誤解比較大的地方

5、最後的賦值之前,臨時結果也是存儲在操作數棧中

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章