Dart 兼具:
- 一个相等运算符
==
和 - 一个名为 的顶级函数
identical()
。
通过语法的选择,想要==
更频繁地使用 Dart 的运算符感觉很自然identical()
,我喜欢这样。事实上,Idiomatic Dart的平等部分指出“在实践中,你很少需要使用” 。identical()
在最近对我的一个关于自定义过滤器的问题的回答中,似乎Angular Dart更倾向于使用,identical()
而不是==
在尝试确定模型的更改是否已达到稳定状态时。(我认为,出于效率的原因,这对于大型模型是有意义的。)
这让我开始思考int
's 的身份,所以我写了一些identical()
over int
s 的测试。虽然我预计 small int
s可能是“interned/cached”(例如类似于JavaInteger.valueOf()
所做的),但令我惊讶的是,我似乎无法生成两个int
相等但不相同的 s。我得到了类似的结果double
。
int
和值是否double
被保留/缓存?或者也许identical()
是特别对待他们?来自 Java 背景,我曾经等同于 Dart 的:
==
到Java的equal()
方法和identical()
到 Java 的相等性测试==
。
但现在这似乎是错误的。有谁知道发生了什么?