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 = new Person('111', 'Bob');
var robert = new 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 中的顶级函数 .
3 回答
Dart支持
==
表示相等性,identical(a, b)
表示身份 . Dart不再支持===
语法 .如果要检查对象是否为"equal",请使用
==
进行相等性 . 您可以在类中实现==
方法来定义相等意味着什么 . 例如:请注意
a == b
的语义是:如果
a
或b
是null
,则返回identical(a, b)
否则,返回
a.==(b)
使用
identical(a, b)
检查两个变量是否引用同一个实例 . identical是dart:core
中的顶级函数 .应该注意的是,在Dart中,
identical
的工作方式类似于Javascript,其中(5.0 == 5)
是true
,但identical(5.0, 5)
是false
.由于DART被认为与javascript相关,但是===存在,我希望不会很快被投票 .
身份作为一个概念意味着1等于1,但1.0不等于1,false也不等于0,"2"也不等于2,即使每个人相互评估并且1 == 1.0返回true .