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

关于Dart中List<Map>两种循环赋值场景输出结果差异的疑问

问题原因

这是Dart中对象引用传递的特性导致的,Map属于引用类型,变量存储的是对象在内存中的地址,而非对象本身的拷贝:

  • 场景1逻辑:
    你在循环外仅初始化了1个_tempMap对象,整个循环过程中操作的始终是同一个内存地址的Map:每次循环先清空该Map的内容、写入当前i对应的键值,再把这个Map的引用添加到列表中。最终列表里的5个元素全部指向同一个Map对象,最后一次循环(i=4)修改的内容会同步到所有引用指向的对象上,因此输出全是i=4的结果。
  • 场景2逻辑:
    你把_tempMap的初始化放在了循环内部,每次循环都会创建一个全新的、独立内存地址的Map对象,写入当前i对应的键值后再添加到列表中,列表里的每个元素都是互不干扰的独立对象,因此输出符合预期。

拓展建议

如果你的业务逻辑必须要在循环外定义临时Map变量,可以在添加到列表时手动做一次值拷贝,避免引用共用的问题:

_reminders.add(Map.from(_tempMap)); // 对当前_tempMap做值拷贝后再添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 13:24:05