在取消装箱时,将装箱值的副本转换为适当的变量类型,但在堆上盒式副本的内存位置会发生什么情况。装箱副本是否保留在该位置并覆盖堆上的内存?
发布于 2016-05-27 16:52:13
装箱副本是否保留在该位置并覆盖堆上的内存?
是。毕竟,还可以有其他提及:
object o1 = 5;
object o2 = o1;
int x = (int) o1;
x = 10;
Console.WriteLine(o2); // Still 5装箱值就像普通对象一样,在没有更强引用的情况下有资格进行垃圾收集。
发布于 2016-05-27 16:55:11
是的,当然,当解除装箱时,原来的总是不受影响的。
在IL级别,有两个解装箱的操作码:unbox.any和unbox。
根据MSDN,unbox.any
当应用于值类型的装箱形式时,unbox.any指令提取包含在obj (类型为O)中的值,因此等效于unbox后面跟着ldobj。
和unbox
..。从对象复制值类型不需要打开框。通常,它只计算已存在于装箱对象中的值类型的地址。
因此,可以或不可能复制原始值,但原始值始终不受影响。
https://stackoverflow.com/questions/37488694
复制相似问题