如果两个不同的对象具有相同的哈希码,是否可能?这是否意味着它们是相同的?

Bam*_*oUA 1 object hashcode cloning flutter

我有课

class Controller with EquatableMixin {
  final int id;
  //... other props

  Controller.from(Controller controller) :   
    id = controller.id,
    //... other props assignments

  List<Object> props => [
    id,
    //... other props
  ];
}

final ctrl1 = Controller(...); // Create ctrl1
final ctrl2 = Controller.from(ctrl1); // Create ctrl2 (actually clonning)
assert(ctrl1.hasCode != ctrl2.hasCode); // triggered!
Run Code Online (Sandbox Code Playgroud)

我期望 和ctrl1ctrl2具有不同hashCodes 的不同对象,但它们具有相同的hashCode。为什么?我如何确保这ctrl12不是指向 的指针ctrl2

nvo*_*igt 5

“哈希码”是一个定义。您决定您的对象具有什么哈希码。不应使用哈希码来确定两个对象是否实际上是同一内存实例。

显然,两个不同的对象可以具有相同的哈希码:

int i = 5;
int x = 5;
Run Code Online (Sandbox Code Playgroud)

它们应该具有相同的哈希码,毕竟它们是相同的值。它仍然是两个不同的变量。


哈希码也没有说明两个对象是否相等。它所做的唯一声明是具有不同哈希码的两个对象相等。具有相同哈希码的两个对象不相等,直到您检查它们是否相等。他们可能是平等的。哈希码是一种减少必须进行的实际相等性检查次数的方法,而不是确定某些内容是否实际上相等的方法。