– 那些以為知道, 實際上卻不知道的事 –
Boxing, Unboxing
簡單來說 * Boxing : Value Type -> Object * Unboxing : Object -> Value Type
舉個例子 Boxing:
Unboxing:
其中Boxing前的 valueTypeI 記憶體位置與
Unboxing後的 unBoxingValueTypeJ記憶體位置會不相同, 這是因為Value Type的因素
有了以上的概念, 我們可以來挑戰一下以下幾種情形會有什麼結果
答案是:
解題:
objA == objB 比的是reference
objA.Equals(objB)比的是值
另一題比較有挑戰性
答案是:
解題:
第一次(Counter)project.counter Unboxing後的ValueType記憶體位置與
第二次(Counter)project.counter Unboxing後的記憶體位置不同
所以第一次Increase()的結果不可能帶到第二次 Unboxing後的記憶體位置
所以才會是這個結果
你答對了嗎?