You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何引用指向不同值?求解释此C#代码输出5的原因

为什么这段代码输出5?

先看你的代码:

object x = 5;
object y = x;
x = 10;
Console.WriteLine(y);

拆解执行过程就能明白原因:

  • 第一步:object x = 5;
    确实发生了装箱:值类型int的5被包装成一个object实例存到堆上,栈上的变量x保存着这个堆对象的引用。

  • 第二步:object y = x;
    这是复制引用,此时x和y都指向堆上同一个装箱后的5对象。

  • 第三步:x = 10;
    重点在这:你不是修改原来那个装箱对象的值,而是重新执行了一次装箱操作——把int值10包装成一个全新的object实例,然后让x的引用指向这个新对象。原来的装箱5对象完全没被改动,y依然指向它。

所以最后Console.WriteLine(y)输出的还是最初的5。

核心点:值类型的装箱对象是不可变的,你无法直接修改装箱后的值。如果是自定义引用类型(比如一个带属性的类),修改对象的成员属性会让所有指向它的引用看到变化,但值类型的赋值操作只会生成新的装箱对象,不会修改原有对象。


内容的提问来源于stack exchange,提问作者Zolter Zolter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:55:16