亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中a=a+1和a+=1的區別是什么

發布時間:2021-12-02 08:43:25 來源:億速云 閱讀:407 作者:iii 欄目:開發技術

本篇內容介紹了“java中a=a+1和a+=1的區別是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    java a=a+1和a+=1的區別

    java中a=a+1和a+=1的區別是什么

    測試用例調用的方法

      public static void test(Object obj) {
            System.out.println(obj.getClass());
        }

    (1) 精度小于int(或long)的數值運算的時候都回被自動轉換為int(或long)后進行計算,運算結果為

    char i = 'a';
    byte j = 2;
    test(i + j);//class java.lang.Integer
    byte i1 = 1;
    short j1 = 2;
    test(i1 + j1);//class java.lang.Integer

    (2)char、byte、short、int、long等整形數和float(或double)進行計算,會自動先提升float(double),在進行計算

    int i2 = 1;
    float j2 = 1.5f;
    test(i2 + j2);//class java.lang.Float

    (3)float與double進行運算時,會float會先提升為double

    float i3 = 1.2f;
    double j3 = 1;
    test(i3 + j3);//class java.lang.Double

    (4)a=a+1和a+=1的區別

    java中a=a+1和a+=1的區別是什么

    Java趣事a=a++和a=++a

    如果問 a++ 和 ++a 的區別,估計很多都能回答上來。a++ 是先取 a 的值再自增 。而 ++a 剛好相反,是先自增再取 a 的值。這里有點編程基礎都可以理解,不做過多解釋,但在 Java 里面事情就真的這么簡單嗎?

    int a = 1;
    a = a++;
    System.out.println(a);

    憑借自己所學,在不測試的情況下,你能給出答案嗎?

    第一次看見這個問題的時候,想當然的認為答案是:2。但殘酷的事實告訴我,答案是:1。當時面對這個結果我是無法接受的,網上瘋狂搜索這個答案的解釋。限于當時知識的水平,只記住了這個結論,至于推導這個結論那些指令,一個也不能理解。今天看書遇見數據操作,就又想起了這個問題,就根據自己的知識水平,重新推導這個過程。

    首先用 IDEA 打開生成的 class 文件。

    java中a=a+1和a+=1的區別是什么

    很直觀的告訴我們結果為 1 ,但這段代碼只解釋了 result,而沒有解釋 why ,繼續用 javap -c 這個命令,結果如圖。

    java中a=a+1和a+=1的區別是什么

    以第一次遇見這道題的水準,勉強能看懂第一步的 Java 代碼,第二步的指令就徹底看不懂了。而現在我可以從這些指令里面分析結果了(這里需要分析的就前五行命令,后面指令為打印輸出)。

    • iconst_1

    將常量 1 壓入操作數棧。這個操作是 int 值為 1~5 的時候。如果是 -128~127 這個范圍是用的 bipush x (x 為實際數值)。 -2^15~2^15-1 這個范圍是使用的 sipush x 這個命令(同上)。 -2^31~2^31-1 這個范圍是使用的 ldc 這個命令。

    • istore_1

    彈出操作數棧頂的數(此時為 1)并賦值給局部變量第一個元素即索引為 1 的 a。局部變量是采用的數組形式,索引為 0 的是 main() 的參數 args 。

    • iload_1

    把局部變量索引為 1 的變量(這里是 a)壓入操作數棧,此時棧頂元素為 1 。

    • incc 1,1(關鍵)

    把局部變量索引為 1 的數加 1 ,此時 a 的值為 2。注意:這個結果沒有壓入操作數棧。

    • istore_1

    彈出棧頂的元素(此時為 1)賦值給 a ,覆蓋 a 為 2 的結果。

    整個過程大致就是這樣,來一幅圖解釋吧。

    java中a=a+1和a+=1的區別是什么

    這個問題解決了,那么下面這段代碼就好理解了。

    int a = 1;
    a = ++a;
    System.out.println(a);

    直接上截圖吧

    java中a=a+1和a+=1的區別是什么

    “java中a=a+1和a+=1的區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    马关县| 巩留县| 剑川县| 泌阳县| 祁门县| 五常市| 南投市| 凌云县| 广河县| 九寨沟县| 宁海县| 扎囊县| 桑植县| 怀安县| 咸宁市| 顺平县| 太康县| 贵南县| 兴业县| 荣成市| 修水县| 温州市| 望奎县| 汾阳市| 吴桥县| 中宁县| 双柏县| 饶阳县| 江安县| 明水县| 从江县| 全椒县| 璧山县| 东乌珠穆沁旗| 安化县| 天祝| 武强县| 太仓市| 贺州市| 福安市| 恩平市|