为什么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
相关产品推荐
相关产品推荐

