拆箱發生時,將裝箱值的副本轉換爲適當的變量類型,但在堆上的裝箱副本的內存位置會發生什麼情況。 盒裝副本是否保留在該位置並覆蓋堆上的內存?拆箱機制
Q
拆箱機制
5
A
回答
4
盒裝副本是否保留在該位置並覆蓋堆上的內存?
是的。畢竟,有可能是其他引用它:
object o1 = 5;
object o2 = o1;
int x = (int) o1;
x = 10;
Console.WriteLine(o2); // Still 5
盒裝值像普通對象,在被符合垃圾收集條件時,有沒有給他們更多的強引用。
3
是的,當然,拆箱時,原件始終不受影響。
在IL級別下,有兩個拆箱操作碼:unbox.any
和unbox
。
根據MSDN,regarding unbox.any
:
當應用於 值類型的盒裝形式中,unbox.any指令 提取包含內 OBJ(類型O)的值,因此是 相當於unbox後跟ldobj。
[...]是不需要拆箱從對象複製 值類型。 通常,它只是計算 對象中已存在的值類型 的地址。
因此,原始值的副本可能會也可能不會被創建,但原始值始終不受影響。
相關問題
- 1. 拆箱vagrant箱失敗
- 2. Monad「拆箱」
- 3. 自動拆箱
- 4. 拳擊拆箱
- 5. 拆箱問題
- 6. 拆箱功能
- 7. 哪裏限制通用類型與Double Typeparam - 裝箱/拆箱?
- 8. 是否強制轉換爲基類,包括裝箱和拆箱
- 9. 拆箱值類型
- 10. 拆箱龍在Java
- 11. 拳擊與拆箱
- 12. 拳擊與拆箱
- 13. Scalaz拆箱標籤類型不會自動拆箱
- 14. 類別#isAssignable來源和拆箱/裝箱
- 15. Java的自動裝箱/拆箱wierdness
- 16. 誰來做自動裝箱/拆箱?
- 17. 裝箱和拆箱的概念
- 18. 解析或自動裝箱或拆箱
- 19. C中的裝箱和拆箱#
- 20. 自動拆箱的對象
- 21. 拆箱到未知類型
- 22. Scala和抽象型 「拆箱」
- 23. 整數枚舉和拆箱
- 24. 不能拆箱爲INT
- 25. 拆箱動態類型
- 26. 拆箱是否昂貴?
- 27. 拆箱組合框項目
- 28. 直接拆箱盒int到
- 29. 拆箱和泛型方法
- 30. 鑄造,拆箱,轉換..?