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

Dart语言中List类型数据的异常行为原因求解

值类型与引用类型的本质差异
  • int(值类型)的情况
    当你把一个int变量赋值给另一个变量时,会直接拷贝变量的实际数值到新变量里。比如:

    int originalValue = 10;
    int newValue = originalValue;
    newValue = 20; // 这里修改的是newValue自己的拷贝值
    

    此时originalValue还是10,因为两个变量各自持有独立的数值,修改其中一个不会影响另一个。

  • List(引用类型)的情况
    List属于引用类型,赋值时拷贝的不是列表里的所有元素,而是指向列表在内存中存储位置的引用(地址)。比如:

    List<int> originalList = new List<int>{1,2,3,4};
    List<int> newList = originalList;
    newList.Add(5); // 这里修改的是两个变量共同指向的同一份列表数据
    

    所以originalList也会跟着变成[1,2,3,4,5]——因为newList和originalList本质上是“指向同一个东西的两个名字”,操作任何一个都是在改同一个对象。

如果想让newList和originalList相互独立,需要创建一个新的列表拷贝,比如:

List<int> newList = new List<int>(originalList);
// 或者用ToList()方法
List<int> newList = originalList.ToList();

这样修改newList就不会影响originalList了。

内容的提问来源于stack exchange,提问作者강기산

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:59:59