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

为什么Dart中同一函数返回的对象使用==比较结果不相等

原理说明

Dart中==运算符的默认判断规则如下:

  • 对于int、double、String、bool等基础值类型,==判断的是存储的值是否相等
  • 对于List、Map、类实例等引用类型,默认==判断的是两个变量是否指向内存中同一个对象,不会校验内部存储的内容是否一致。

你的示例代码中,gfg() => [1, 2]每次调用都会生成一个全新的List对象,两次调用返回的List虽然内容完全一致,但属于内存中两个独立的对象,持有不同的内存地址,所以geek1 == geek2的结果为false。

内容相等判断方案

如果需要校验两个List的内容是否完全相同,可以用以下方式:

  • 小体量List可以手动遍历逐个对比元素
  • 项目如果引入了Flutter SDK,可以使用foundation.dart中提供的listEquals方法:
import 'package:flutter/foundation.dart';

gfg() => [1, 2];
void main() {
  var geek1 = gfg();
  var geek2 = gfg();
  print(listEquals(geek1, geek2)); // 输出 true
}
  • 纯Dart项目可以引入collection依赖,使用ListEquality进行对比:
import 'package:collection/collection.dart';

gfg() => [1, 2];
void main() {
  var geek1 = gfg();
  var geek2 = gfg();
  print(ListEquality().equals(geek1, geek2)); // 输出 true
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:57:01