成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

淺談java中的i=i++

tianyu / 1061人閱讀

淺談java中的 “i=i++;”

首先有一下代碼:

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

你可以試想這段代碼是多少 大多數(shù)同學(xué)可能會(huì)回答是13,然而事實(shí)并非如此,如下圖結(jié)果:


在上圖中,我首先進(jìn)行了運(yùn)行,可以看到結(jié)果,我們的i并不是如大多人猜測的那樣為13輸出 ,而是看上去沒有做這個(gè)自增的操作,然而這是為什么呢?

于是,就有了后面反編譯為字節(jié)碼的操作,我們利用javap 指令反編譯后可以看清楚其中發(fā)生的事情,有同學(xué)對其中的JVM指令不清楚,沒關(guān)系,我這里先普及一下本文代碼中所涉及的JVM指令;

(這里的關(guān)鍵指令碼在于main方法之后,因此只針對于下面的指令進(jìn)行解釋,其之前的是虛擬機(jī)自動(dòng)構(gòu)建的默認(rèn)構(gòu)造方法的指令碼)

1.bipush: 將單字節(jié)的常量值(-128~127)推送至棧頂
2.istore: 將棧頂int型數(shù)值存入指定本地變量
3.iload: 將指定的int型本地變量推送至棧頂
4.iinc: 該指令用于對本地(局部)變量進(jìn)行自增減操作。該指令第一參數(shù)為本地變量的編號,第二個(gè)參數(shù)為自增減的數(shù)量
5.getstatic 獲取指定類的靜態(tài)域,并將其值壓入棧頂(到這個(gè)位置之后就是調(diào)用靜態(tài)對象out打印的操作不再贅述,感興趣的同學(xué)可以在本文末尾附上的鏈接的去了解一下)

知道基本的幾個(gè)指令之后我們來分析上圖中關(guān)鍵指令的意思吧:

bipush 12這里是把12推至棧頂 棧里存儲(chǔ)了12 這個(gè)int數(shù)值

istore_1 這里是把12彈出給第二個(gè)(備注:第1個(gè)本地變量應(yīng)該是this)本地變量 即i=12

iload_1 這里是把第二個(gè)本地變量(i)的值推入棧頂 此時(shí)棧頂為12

iinc 1,1 自然是i=i+1 即i++ 這個(gè)時(shí)候i=13

istore_1這里是把棧頂值彈出給本地變量i,這個(gè)時(shí)候 i又被賦值為 12

因此最終 打印出來的時(shí)候i為12。

CSDN一老哥整理的JVM指令集合,很方便查詢學(xué)習(xí)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77226.html

相關(guān)文章

  • 淺談Java中的同步

    摘要:在多線程的問題上面概念比較多,也需要慢慢理解,其實(shí)也在多線程的鎖的上面做了很多優(yōu)化,還有互斥同步和非互斥同步,還有很多概念,什么是自旋和自適應(yīng)自旋,鎖消除順便提一下,上面的字符串拼接的例子就是用到了這種優(yōu)化方式,鎖粗化,我們下次再繼續(xù)分享。 在我們平常的開發(fā)工作中,或多或少的都能接觸到多線程編程或者一些并發(fā)問題,隨著操作系統(tǒng)和系統(tǒng)硬件的升級,并發(fā)編程被越來越多的運(yùn)用到我們的開發(fā)中,我們...

    YacaToy 評論0 收藏0
  • 淺談并發(fā)及Java實(shí)現(xiàn) (一) - 并發(fā)設(shè)計(jì)的三大原則

    摘要:并發(fā)設(shè)計(jì)的三大原則原子性原子性對共享變量的操作相對于其他線程是不可干擾的,即其他線程的執(zhí)行只能在該原子操作完成后或開始前執(zhí)行。發(fā)現(xiàn)兩個(gè)線程運(yùn)行結(jié)束后的值為。這就是在多線程情況下要求程序執(zhí)行的順序按照代碼的先后順序執(zhí)行的原因之一。 并發(fā)設(shè)計(jì)的三大原則 原子性 原子性:對共享變量的操作相對于其他線程是不可干擾的,即其他線程的執(zhí)行只能在該原子操作完成后或開始前執(zhí)行。 通過一個(gè)小例子理解 pu...

    gecko23 評論0 收藏0
  • 淺談計(jì)算機(jī)架構(gòu)與java內(nèi)存模型

    摘要:主機(jī)架構(gòu)與內(nèi)存模型多任務(wù)處理器在現(xiàn)代計(jì)算機(jī)系統(tǒng)中幾乎已是一項(xiàng)必備的功能了。在計(jì)算機(jī)系統(tǒng)中,可能存在多個(gè)處理器,每個(gè)處理器都有自己的高速緩存,而他們又共享同一主內(nèi)存。 計(jì)算機(jī):輔助人腦的好工具 計(jì)算機(jī)的定義: 接受使用者輸入指令與數(shù)據(jù), 經(jīng)由中央處理器的數(shù)學(xué)與邏輯單元運(yùn)算處理后,以產(chǎn)生或儲(chǔ)存成有用的信息 我們的個(gè)人電腦也是計(jì)算機(jī)的一種,,依外觀來看這家伙主要分三部分: 輸入單元:包括鍵...

    null1145 評論0 收藏0
  • 淺談cas

    摘要:在的包中,大神大量使用此技術(shù),實(shí)現(xiàn)了多線程的安全性。我們將變量用修飾,保證線程間的可見性。線程也通過此方法獲取當(dāng)前值,進(jìn)行操作,比較內(nèi)存值相等進(jìn)行修改。我們通過保證了對的并發(fā)線程安全,其安全的保證是通過調(diào)用的代碼實(shí)現(xiàn)的。 前言 研究java并發(fā)編程有一段時(shí)間了, 在并發(fā)編程中cas出現(xiàn)的次數(shù)極為頻繁。cas的英文全名叫做compare and swap,意思很簡單就是比較并交換。在jd...

    ?。琛?/span> 評論0 收藏0
  • 淺談Java字符串(操作)

    摘要:由于實(shí)現(xiàn)了接口,它支持通過索引值去隨機(jī)訪問元素。第三種,循環(huán)遍歷。如下效率分析遍歷時(shí),使用隨機(jī)訪問即,通過索引序號訪問效率最高,而使用迭代器的效率最低類型轉(zhuǎn)換如何實(shí)現(xiàn)與基本數(shù)據(jù)類型的裝換將轉(zhuǎn)換為基本的數(shù)據(jù)類型。 雖是讀書筆記,但是如轉(zhuǎn)載請注明出處 http://segmentfault.com/blog/exploring/ .. 拒絕伸手復(fù)制黨 字符串遍歷 String str...

    tylin 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<