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

Set*_*add 18 dart

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

Set*_*add 34

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
}
Run Code Online (Sandbox Code Playgroud)

注意语义a == b是:

  • 如果任一a或者bnull,回报identical(a, b)
  • 否则,返回 a.==(b)

使用identical(a, b)检查,如果两个变量引用相同的实例.相同的是一个顶级功能dart:core.


sma*_*c89 5

应该注意的是,identical在 dart 中使用该函数有一些注意事项,正如此 github 问题评论中提到的:

该规范已更新,以处理双打之间的相同情况,如下所示:

Sametime() 函数是预定义的 dart 函数,当且仅当它的两个参数为以下任意一个时,该函数返回 true:

  • 同一个物体。
  • 类型为 int 且具有相同的数值。
  • 属于 double 类型,不是 NaN,并且具有相同的数值。

这意味着,即使dart 中的所有内容都是一个对象,并且fg是不同的对象,以下打印true.

int f = 99;
int g = 99;
print(identical(f, g));
Run Code Online (Sandbox Code Playgroud)

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


因此,为了回答您的问题,==用于确定两个对象是否具有相同的值,但identical用于测试引用相等性,除了上面摘录所确定的double和 的情况之外。int

请参阅:相等和关系运算符