淺談java中的 “i=i++;”
首先有一下代碼:
public class Demo{ public static void main(String []args){ int i=12; i=i++; System.out.println(i); } }
你可以試想這段代碼是多少 大多數同學可能會回答是13,然而事實并非如此,如下圖結果:
在上圖中,我首先進行了運行,可以看到結果,我們的i并不是如大多人猜測的那樣為13輸出 ,而是看上去沒有做這個自增的操作,然而這是為什么呢?
于是,就有了后面反編譯為字節碼的操作,我們利用javap 指令反編譯后可以看清楚其中發生的事情,有同學對其中的JVM指令不清楚,沒關系,我這里先普及一下本文代碼中所涉及的JVM指令;
(這里的關鍵指令碼在于main方法之后,因此只針對于下面的指令進行解釋,其之前的是虛擬機自動構建的默認構造方法的指令碼)
1.bipush: 將單字節的常量值(-128~127)推送至棧頂
2.istore: 將棧頂int型數值存入指定本地變量
3.iload: 將指定的int型本地變量推送至棧頂
4.iinc: 該指令用于對本地(局部)變量進行自增減操作。該指令第一參數為本地變量的編號,第二個參數為自增減的數量
5.getstatic 獲取指定類的靜態域,并將其值壓入棧頂(到這個位置之后就是調用靜態對象out打印的操作不再贅述,感興趣的同學可以在本文末尾附上的鏈接的去了解一下)
知道基本的幾個指令之后我們來分析上圖中關鍵指令的意思吧:
bipush 12這里是把12推至棧頂 棧里存儲了12 這個int數值
istore_1 這里是把12彈出給第二個(備注:第1個本地變量應該是this)本地變量 即i=12
iload_1 這里是把第二個本地變量(i)的值推入棧頂 此時棧頂為12
iinc 1,1 自然是i=i+1 即i++ 這個時候i=13
istore_1這里是把棧頂值彈出給本地變量i,這個時候 i又被賦值為 12
因此最終 打印出來的時候i為12。
CSDN一老哥整理的JVM指令集合,很方便查詢學習
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76594.html
摘要:不受檢查異常為編譯器不要求強制處理的異常,檢查異常則是編譯器要求必須處置的異常。潛在的異常處理器是異常發生時依次存留在調用棧中的方法的集合。當運行時系統遍歷調用棧而未找到合適的異常處理器,則運行時系統終止。異常處理涉及到五個關鍵字,分別是。 概念 程序運行時,發生的不被期望的事件,它阻止了程序按照程序員的預期正常執行,這就是異常。 異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并...
摘要:在中,算法專家凱文斯拉文提起這個故事,并向觀眾展示了算法控制的圖景。斯拉文把算法稱之為計算機用于決策的數學。凱文斯拉文表示我們正在用炸藥和巖石鋸打穿美國,讓算法能早微秒完成交易,所有的一切都是為了一個前所未有的通訊系統。 The Making of a Fly,這是一本1992年出版的學術書籍,受研究者喜歡。2011年4月8日,一家書商對其的售價為170萬美元,另一家書商標價220萬美元。如...
摘要:為了講清復用的是什么,首先得先說明一下邏輯流的概念。理解了這個,那么所謂的復用,指的就是在一個邏輯流里處理多個事件如何做到利用多路復用器,輪詢監聽各路,如果一旦有事件發生,那么就去處理,否則程序阻塞。 java nio提供了一套稱為I/O多路復用的編程范式,那么什么叫做I/O多路復用呢?所謂的I/O多路復用,從字面意思上來理解,就是:有多個I/O操作(或是寫,或是讀,或是請求),這多個...
摘要:從視角理解系統結構連載關注我的微博鏈接了解最新動態眾所周知是計算機的大腦它負責執行程序的指令內存負責存數據包括程序自身數據同樣大家都知道內存比慢很多其實在年前的頻率和內存總線的頻率在同一個級別訪問內存只比訪問寄存器慢一點兒由于內存的發展受到 從Java視角理解系統結構連載, 關注我的微博(鏈接)了解最新動態 眾所周知, CPU是計算機的大腦, 它負責執行程序的指令; 內存負責存數據,...
摘要:當你在程序中對象時,有沒有考慮過是如何把靜態的字節碼轉化為運行時對象的呢,這個問題看似簡單,但清楚的同學相信也不會太多,這篇文章首先介紹類初始化的機制,然后給出幾個易出錯的實例來分析,幫助大家更好理解這個知識點。 當你在 Java 程序中new對象時,有沒有考慮過 JVM 是如何把靜態的字節碼(byte code)轉化為運行時對象的呢,這個問題看似簡單,但清楚的同學相信也不會太多,這篇...
閱讀 1123·2021-11-24 09:39
閱讀 3623·2021-09-02 15:21
閱讀 2161·2021-08-24 10:01
閱讀 722·2021-08-19 10:55
閱讀 2447·2019-08-30 15:55
閱讀 1212·2019-08-30 14:16
閱讀 2992·2019-08-29 15:17
閱讀 3235·2019-08-29 13:53