首页 > 解决方案 > Dart == 运算符和相同的函数不会为具有相同内容的 2 个对象产生 true

问题描述

所以我一直试图通过它们的字段来比较两个对象。

我注意到equals飞镖中没有方法。但是有identical函数和==运算符。

我似乎无法理解为什么没有 equals 方法。如果我想这样做怎么办?

class Name {
  String fname;
  String lname;

  String get firstName => this.fname;
  void set firstName(String fname) => this.fname = fname;

  String get lastName => this.lname;
  void set lastName(String lname) => this.lname = lname;

  Name({this.fname, this.lname});

  @override
  String toString() {
    return this.firstName + " " + this.lastName;
  }

  bool equals(Name n2) {
    return this.firstName == n2.firstName && this.lastName == n2.lastName
        ? true
        : false;
  }
}

void main(List<String> args) {
  Name n1 = new Name();
  n1.firstName = "James";
  n1.lastName = "Bond";

  Name n2 = new Name();
  n2.firstName = "James";
  n2.lastName = "Bond";

  print(n1.equals(n2)); // true
  print(identical(n1, n2)); // false
  print(n1 == n2); // false
}

我能做什么,而不是让自己的平等。或者 dart 是否希望您手动执行此操作。

标签: oopdart

解决方案


identical即使您要比较的两个对象的名字和姓氏相同,也不会返回 true。那是因为它们不是相同的实例。每个实例都有自己的身份和哈希码。

您可以覆盖 == 运算符和哈希码。然后,您将能够比较两个不同的实例。Equatable-Package 已经为您做到了,因此您可以使用 == 运算符来比较两个不同的实例:https ://pub.dev/packages/equatable


推荐阅读