首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解装箱机制

解装箱机制
EN

Stack Overflow用户
提问于 2016-05-27 16:49:59
回答 2查看 145关注 0票数 5

在取消装箱时,将装箱值的副本转换为适当的变量类型,但在堆上盒式副本的内存位置会发生什么情况。装箱副本是否保留在该位置并覆盖堆上的内存?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-27 16:52:13

装箱副本是否保留在该位置并覆盖堆上的内存?

是。毕竟,还可以有其他提及:

代码语言:javascript
复制
object o1 = 5;
object o2 = o1;
int x = (int) o1;
x = 10;
Console.WriteLine(o2); // Still 5

装箱值就像普通对象一样,在没有更强引用的情况下有资格进行垃圾收集。

票数 4
EN

Stack Overflow用户

发布于 2016-05-27 16:55:11

是的,当然,当解除装箱时,原来的总是不受影响的。

在IL级别,有两个解装箱的操作码:unbox.anyunbox

根据MSDN,unbox.any

当应用于值类型的装箱形式时,unbox.any指令提取包含在obj (类型为O)中的值,因此等效于unbox后面跟着ldobj。

unbox

..。从对象复制值类型不需要打开框。通常,它只计算已存在于装箱对象中的值类型的地址。

因此,可以或不可能复制原始值,但原始值始终不受影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37488694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档