Boxing/unboxing,更改装箱值的引用副本不会反映到装箱值

Boxing/unboxing, changing the copy of the refence of the boxed value does not refected to the boxed value

所以我通读了 the documentation of Microsoft here

考虑以下代码:

int i = 0;
object o = i;
object p = o;

o = 1;
p = 2;

Console.WriteLine($"o:{o}, p:{p}");
//output o:1, p:2

我的理解是装箱发生在 object o = i; 上,现在 o 是对堆中值的引用。然后 p 被分配为与 o.

相同

为什么 p 的变化没有反映到 o?他们不是指向同一个地址吗?

您的理解有误;这条线

 object p = o;

分配 p 相同的引用;然而:

o = 1;

创建一个 new 对象(盒装整数)并将 new 引用分配给 oop 现在是不同的引用;

p = 2;

然后对 另一个 盒装对象和引用做同样的事情


您的期望 "ref locals" 的工作方式,但是:

int i = 0;
ref int o = ref i;
ref int p = ref o;

o = 1;
Console.WriteLine(i); // 1
p = 2;
Console.WriteLine(i); // 2