關於i 的底層實現原理

2021-06-12 20:51:24 字數 1226 閱讀 9825

大家都知道i++在做運算的時候,是先賦值再自加1,但底層究竟是怎樣實現的呢?下面,就三個例子來說明一下i++的底層實現原理。

第乙個例子:

public class test1

}

程式輸出為10。

因為i++在作計算的時候要引入乙個臨時的變數,底層是這樣實現的:

_temp = i;

i = i + 1;

i = _temp;

先把i的值賦給乙個臨時變數_temp,然後再作自加1的操作,最後又把臨時變數_temp的值賦給了i,看到這裡有點迷糊了吧。

如果換一種寫法,int j = i++,自己就能夠看懂了,底層也就是這樣實現的:

_temp = i;

i = i + 1;

j = _temp;

所以,無論是哪種情況,最後列印出的結果都是10。

第二個例子:

public class test2

}

程式輸出結果為1。

假設有乙個變數m接收第乙個i++的計算結果,那麼m的值一定是0,而底層i的值變成了1

再假設又有乙個變數n接收第二個i++的計算結果,由於底層i的值變成了1,所以n的值是1,

那麼,計算過程就變成了m+n,等於1。

第三個例子:

public class test3finally

} public static void main(string args)

}

程式列印出j的值是0。

無論什麼時候,只要是有finally語句塊,就一定會執行的,所以底層i的值是2。

假設有乙個變數s接收try語句塊中i++的值,s為0,return s,所以j的值是0。

這道題可以改一下,finally語句塊中的語句改為return i++,結果是什麼。

結果j的值是1,因為最後的返回結果不是try語句塊中的結果,而是finally語句塊中結果。

執行try語句塊中的語句,i的值變成了1,所以finally語句塊中的語句結果是1,底層i的值是2。

再改一下,finally語句塊中的語句為return ++i,結果是什麼。

結果j的值是2,因為最後finally語句塊中的語句是i自加1之後,再return的。

所以finally語句塊中返回的是2,底層i的值是2。

ArrayList的底層實現原理

一 對於arraylist需要掌握的七點內容 二 原始碼分析 2.1 arraylist的建立 常見的兩種方式 liststrlist new arraylist liststrlist2 new arraylist 2 arraylist源 基本屬性 物件陣列 arraylist的底層資料結構 p...

List set Map的底層實現原理

arraylist實現原理要點概括 參考文獻 arraylist是list介面的可變陣列非同步實現,並允許包括null在內的所有元素。底層使用陣列實現 該集合是可變長度陣列,陣列擴容時,會將老陣列中的元素重新拷貝乙份到新的陣列中,每次陣列容量增長大約是其容量的1.5倍,這種操作的代價很高。採用了fa...

HashMap的底層實現原理

hashmap的底層是通過陣列 鍊錶 即雜湊表 的結構來實現的。hashmap的例項有兩個引數影響其效能 初始容量和載入因子。初始容量只是雜湊表在建立時的容量,載入因子是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。當雜湊表中的條目超出了載入因子與當前容量的乘積時,通過呼叫rehash方法將容量...