Dart中==和===有什么区别?

时间:2012-11-07 18:03:35

标签: dart

Dart支持==和===吗?平等和身份有什么区别?

4 个答案:

答案 0 :(得分:27)

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 = 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的语义是:

  • 如果abnull,请返回identical(a, b)
  • 否则,请返回a.==(b)

使用identical(a, b)检查两个变量是否引用同一个实例。 identicaldart:core中的顶级函数。

答案 1 :(得分:3)

应该注意的是,在Dart中,identical的工作方式类似于Javascript,其中(5.0 == 5)true,但identical(5.0, 5)false

答案 2 :(得分:2)

由于DART被认为与javascript有关,===存在,我希望不会很快被投票。

作为概念的身份意味着1等于1,但1.0不等于1,假等于0,“2”也不等于2,即使每个相互评估并且1 == 1.0返回true。

答案 3 :(得分:0)

应该注意,在dart中使用identical函数有一些注意事项,如本github问题comment所述:

该规范已更新,可以在双打之间进行相同处理 像这样:

same()函数是预定义的dart函数,该函数返回 如果它的两个参数是:

  • 同一个对象。
  • 类型为int且具有相同的数值。
  • double类型的不是NaN,并且具有相同的数值。

这意味着即使dart中的every thing是一个对象,并且fg是不同的对象,以下打印true

int f = 99;
int g = 99;
print(identical(f, g));

因为int的值相同,而不是引用相同。


因此,为回答您的问题,==用于标识两个对象是否具有相同的值,但是identical用于测试引用相等,除非是double和上面摘录所标识的int

请参阅:equality-and-relational-operators