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

一篇文章帶你從java字節(jié)碼層理解i++和++i

 更新時(shí)間:2021年09月26日 09:56:21   作者:快樂(lè)檸檬  
這篇文章帶你從java字節(jié)碼層理解i++和++i,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

程序目的

從java字節(jié)碼層理解,為何i = i++后,結(jié)果是+1之前的數(shù)值。而i=++i后,結(jié)果是+1之后的值。

關(guān)鍵指令

iload_<n>:從局部變量表獲取值,并壓入操作數(shù)棧。

istore_<n>:出棧,然后存儲(chǔ)到局部變量表。

i++示例源碼

public class TestIPulsPlus {
	public static void main(String[] args) {
		int i = 8;
		i = i++;
//        i = ++i;
		System.out.println(i);
	}
}

i++執(zhí)行結(jié)果:

8

使用jclasslib查看i++字節(jié)碼

找到main方法的Code區(qū):

在這里插入圖片描述

圖:i=i++字節(jié)碼

字節(jié)碼解讀

0 bipush 8
把數(shù)值8壓入操作數(shù)棧,壓棧前轉(zhuǎn)為int類型。
2 istore_1
8出棧,存到編號(hào)為1的局部變量表。

在這里插入圖片描述

圖:編號(hào)為1的局部變量為1

以上兩行指令,完成了int i = 8;這行代碼。

3 iload_1
從局部變量表,獲取int值8。然后壓到操作數(shù)棧。
4 iinc 1 by 1
把局部變量表中的i,進(jìn)行+1操作。此時(shí)棧里面數(shù)值是8,局部變量表中i為9。
7 istore_1
8出棧,存到編號(hào)為1的局部變量表。也就是賦值給i變量。局部變量表的i值從9變?yōu)?。

接下來(lái),解讀i=++i的字節(jié)碼

在這里插入圖片描述

圖:i=++i;字節(jié)碼

++i示例源碼

public class TestIPulsPlus {
	public static void main(String[] args) {
		int i = 8;
//		i = i++;
        i = ++i;
		System.out.println(i);
	}
}

執(zhí)行結(jié)果為:

9

i=++i字節(jié)碼解讀

0 bipush 8
把數(shù)值8壓入操作數(shù)棧,壓棧前轉(zhuǎn)為int類型。
2 istore_1
8出棧,存到編號(hào)為1的局部變量表。

在這里插入圖片描述

圖:編號(hào)為1的局部變量為1

以上兩行指令,完成了int i = 8;這行代碼。

3 iinc 1 by 1
把局部變量表中的i,進(jìn)行+1操作。此時(shí),局部變量表中i為9。
6 iload_1
從局部變量表,獲取int值9。然后壓到操作數(shù)棧。
7 istore_1
9出棧,存到編號(hào)為1的局部變量表。也就是賦值給i變量。

參考

Chapter 6. The Java Virtual Machine Instruction Set

總結(jié)

i=i++i=++i,第3、4行位置是相反的。

i++是先執(zhí)行iload_1,再執(zhí)行iinc 1 by 1。

iload_1:從局部變量表,獲取int值8。然后壓到操作數(shù)棧。

iinc 1 by 1 :把局部變量表中的i,進(jìn)行+1操作。此時(shí)棧里面數(shù)值是8,局部變量表中i為9。

istore_1時(shí),獲取的是棧中的8,所以最后結(jié)果為8。

++i,是先執(zhí)行iinc 1 by 1,再執(zhí)行iload_1

iinc 1 by 1 : 把局部變量表中的i,進(jìn)行+1操作。此時(shí),局部變量表中i為9。

iload_1:從局部變量表,獲取int值9。然后壓到操作數(shù)棧。

istore_1時(shí),獲取的是棧中的9,所以最后結(jié)果為9。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java并發(fā)多線程編程之CountDownLatch的用法

    Java并發(fā)多線程編程之CountDownLatch的用法

    這篇文章主要介紹了Java并發(fā)多線程編程之CountDownLatch的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java集合刪除元素ArrayList實(shí)例詳解

    Java集合刪除元素ArrayList實(shí)例詳解

    這篇文章主要介紹了Java集合刪除元素ArrayList實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • java中BigDecimal類的構(gòu)造詳解及使用

    java中BigDecimal類的構(gòu)造詳解及使用

    這篇文章主要介紹了java中BigDecimal類的構(gòu)造詳解及使用,Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于SpringBoot配置文件application.properties的路徑問(wèn)題

    關(guān)于SpringBoot配置文件application.properties的路徑問(wèn)題

    這篇文章主要介紹了關(guān)于SpringBoot配置文件application.properties的路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 淺析Spring boot 中 logback 配置<springProperty> 讀取application.properties 中的屬性

    淺析Spring boot 中 logback 配置<springPropert

    這篇文章主要介紹了淺析Spring boot 中 logback 配置<springProperty> 讀取application.properties 中的屬性,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java的優(yōu)先隊(duì)列PriorityQueue原理及實(shí)例分析

    Java的優(yōu)先隊(duì)列PriorityQueue原理及實(shí)例分析

    這篇文章主要介紹了Java的優(yōu)先隊(duì)列PriorityQueue原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    這篇文章主要為大家介紹了Map映射LinkedHashSet與LinkedHashMap的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • SpringBoot自動(dòng)裝配Condition的實(shí)現(xiàn)

    SpringBoot自動(dòng)裝配Condition的實(shí)現(xiàn)

    Spring4.0新增@Conditional注解,用于條件化Bean的注冊(cè),通過(guò)實(shí)現(xiàn)Condition接口并重寫matches方法,可以控制Bean的創(chuàng)建與否,感興趣的可以了解一下
    2024-10-10
  • Java常見(jiàn)面試題之final在java中的作用是什么

    Java常見(jiàn)面試題之final在java中的作用是什么

    這篇文章主要介紹了Java常見(jiàn)面試題之final在java中的作用是什么,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 詳解Java中restTemplate的使用

    詳解Java中restTemplate的使用

    這篇文章主要為大家詳細(xì)介紹了Java中restTemplate用法的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11

最新評(píng)論

江孜县| 清镇市| 砀山县| 承德市| 伊宁县| 微山县| 营山县| 疏勒县| 台中市| 恩平市| 辰溪县| 鹤壁市| 汉沽区| 台湾省| 焉耆| 江都市| 封丘县| 资兴市| 哈密市| 安平县| 桦南县| 兰考县| 新泰市| 新建县| 东乌珠穆沁旗| 拉孜县| 峨眉山市| 宁明县| 浪卡子县| 寿阳县| 穆棱市| 信阳市| 兴文县| 平顶山市| 轮台县| 屯留县| 平利县| 彰化县| 潞西市| 无棣县| 双辽市|