[英]What is the difference between == and === in Dart?
Dart 支持 == 和 === 吗? 平等和身份有什么区别?
Dart 支持==
表示相等, identical(a, b)
表示相同。 Dart 不再支持===
语法。
当你想检查对象是否“相等”时,使用==
表示相等。 您可以在您的类中实现==
方法来定义相等的含义。 例如:
class Person {
String ssn;
String name;
Person(this.ssn, this.name);
// Define that two persons are equal if their SSNs are equal
bool operator ==(other) {
return (other is Person && other.ssn == ssn);
}
}
main() {
var bob = Person('111', 'Bob');
var robert = Person('111', 'Robert');
print(bob == robert); // true
print(identical(bob, robert)); // false, because these are two different instances
}
注意a == b
的语义是:
a
或b
为null
,则返回identical(a, b)
a.==(b)
使用identical(a, b)
检查两个变量是否引用同一个实例。 identical是dart:core
中的顶级函数。
应该注意的是,在 dart 中使用identical
的函数有一些注意事项,正如这个 github 问题评论所提到的:
规范已更新为像这样对待双打之间的相同:
identical() 函数是预定义的 dart 函数,如果它的两个参数是:
- 同一个对象。
- 类型为 int 且具有相同的数值。
- double 类型,不是 NaN,并且具有相同的数值。
这意味着即使 dart 中的所有内容都是对象,并且f
和g
是不同的对象,但以下内容会打印true
。
int f = 99;
int g = 99;
print(identical(f, g));
因为 int 的值相同,而不是引用。
因此,为了回答您的问题, ==
用于标识两个对象是否具有相同的值,但identical
用于测试引用相等性,除了上面摘录所标识的double
和int
的情况。
请参阅: 相等和关系运算符
由于据说 DART 与存在 === 的 javascript 相关,我希望不要很快被否决。
身份作为一个概念意味着 1 等于 1,但 1.0 不等于 1,false 也不等于 0,“2”也不等于 2,即使它们相互求值并且 1==1.0 返回 true。
应该注意的是,在 Dart 中, identical
的工作方式类似于 Javascript,其中(5.0 == 5)
是true
,但identical(5.0, 5)
是false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.