最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中a=a+1和a+=1的區(qū)別介紹

 更新時間:2021年12月01日 11:46:47   作者:user2025  
這篇文章主要介紹了java中a=a+1和a+=1的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java a=a+1和a+=1的區(qū)別

在這里插入圖片描述

測試用例調(diào)用的方法

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

(1) 精度小于int(或long)的數(shù)值運算的時候都回被自動轉(zhuǎn)換為int(或long)后進(jìn)行計算,運算結(jié)果為

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等整形數(shù)和float(或double)進(jìn)行計算,會自動先提升float(double),在進(jìn)行計算

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

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

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

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

在這里插入圖片描述

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

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

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

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

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

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

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

這里寫圖片描述

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

  • iconst_1

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

  • istore_1

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

  • iload_1

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

  • incc 1,1(關(guān)鍵)

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

  • istore_1

彈出棧頂?shù)脑兀ù藭r為 1)賦值給 a ,覆蓋 a 為 2 的結(jié)果。

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

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

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

直接上截圖吧

仔細(xì)對比一下,你會發(fā)現(xiàn),兩段代碼的指令一模一樣,但執(zhí)行順序有一點點區(qū)別, iinc 和 iload_1 這兩個命令的執(zhí)行順序變化了一下位置。你還記得這兩條指令的含義嗎?你還記得文章最開始說的區(qū)別嗎?

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis中 if-test 數(shù)字判斷的坑及解決

    mybatis中 if-test 數(shù)字判斷的坑及解決

    這篇文章主要介紹了mybatis中 if-test 數(shù)字判斷的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫的便捷方法

    springboot后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫的便捷方法

    實現(xiàn)springboot 后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫,只需要新建 Mapper、實體類 相應(yīng)的文件夾,將不同數(shù)據(jù)源的文件保存到對應(yīng)的文件夾下,添加綁定數(shù)據(jù)庫配置Config,就可以輕松完成
    2021-08-08
  • SpringBoot實現(xiàn)網(wǎng)頁消息推送的5種方法小結(jié)

    SpringBoot實現(xiàn)網(wǎng)頁消息推送的5種方法小結(jié)

    項目開發(fā)中,實時消息推送已成為提升用戶體驗的關(guān)鍵技術(shù),本文將詳細(xì)介紹SpringBoot中實現(xiàn)網(wǎng)頁消息推送的幾種主流方案,希望對大家有所幫助
    2025-03-03
  • BigDecimal divide除法除不盡報錯的問題及解決

    BigDecimal divide除法除不盡報錯的問題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java Volatile應(yīng)用單例模式實現(xiàn)過程解析

    Java Volatile應(yīng)用單例模式實現(xiàn)過程解析

    這篇文章主要介紹了Java Volatile應(yīng)用單例模式實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 基于Java實現(xiàn)一個復(fù)雜關(guān)系表達(dá)式過濾器

    基于Java實現(xiàn)一個復(fù)雜關(guān)系表達(dá)式過濾器

    這篇文章主要為大家詳細(xì)介紹了如何基于Java實現(xiàn)一個復(fù)雜關(guān)系表達(dá)式過濾器。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • 利用Log4j將不同Package的日志輸出到不同文件的方法

    利用Log4j將不同Package的日志輸出到不同文件的方法

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項目log4j是一個功能強大的日志組件,提供方便的日志記錄。這篇文章主要介紹了利用Log4j將不同Package的日志輸出到不同文件的方法,需要的朋友可以參考借鑒,下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • springboot X-Accel-Redirect 大文件下載實現(xiàn)

    springboot X-Accel-Redirect 大文件下載實現(xiàn)

    本文主要介紹了springboot X-Accel-Redirect 大文件下載實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 一鍵打包壓縮,Java項目變身JAR

    一鍵打包壓縮,Java項目變身JAR

    想要一鍵打包Java項目生成JAR文件并進(jìn)行壓縮?本指南將帶你輕松駕馭這項看似復(fù)雜的任務(wù),讓我們一起揭開神秘的面紗,輕松打包,高效出發(fā)!
    2023-12-12
  • java打印指定年月份的日歷

    java打印指定年月份的日歷

    這篇文章主要為大家詳細(xì)介紹了java打印指定年、指定月份的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

藁城市| 岱山县| 交口县| 宁安市| 八宿县| 得荣县| 乌兰察布市| 若羌县| 宿迁市| 昂仁县| 永平县| 手机| 罗平县| 冀州市| 郧西县| 武定县| 静乐县| 繁昌县| 腾冲县| 开远市| 勐海县| 叶城县| 中阳县| 大埔区| 德格县| 陕西省| 巴彦县| 房产| 清河县| 色达县| 延寿县| 柞水县| 揭西县| 高阳县| 汝城县| 高雄市| 庆元县| 贵定县| 桑植县| 务川| 霍林郭勒市|