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

OOP初学者疑问:对象数组赋值后原对象属性为何被修改?

问题解析:为何book2的属性值会被修改?

你的核心误区是没搞懂C#里引用类型的赋值逻辑,Book作为类属于引用类型,和int这种值类型的赋值规则完全不同:

  • 当你执行books[i] = book2时,并没有把book2这个对象复制一份放进数组,而是把指向book2对象的**内存地址(引用)**复制给了books[i]。也就是说,数组里的每一个元素,和book2指向的都是内存中同一个Book对象。
  • 后续的books[i].pages +=10,本质是通过这个引用直接修改了那个唯一的Book对象的pages属性——不管你用book2.pages还是books[i].pages,操作的都是同一个对象。

看代码的实际执行流程:

  1. 第一次循环:数组元素指向book2,输出初始值800,然后把pages改成810;
  2. 第二次循环:数组元素还是指向同一个book2,此时输出的是已经被修改后的810,再改成820;
  3. 后续循环以此类推,所以输出结果是800、810、820、830、840,而不是五次800。

如果想要每次输出800,你需要在循环里创建新的Book对象,而不是复用同一个book2,比如把赋值语句改成:

books[i] = new Book("test", "test1", 800);

这样每次循环都会生成一个独立的Book实例,修改其中一个的pages不会影响其他。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:05:25