hashCode属性

int hashCode
重写

该对象的哈希码。

哈希码是一个表示对象状态的单一整数,该状态会影响运算符==比较。

所有对象都有哈希码。由Object类实现的默认哈希码仅表示对象的标识符,与默认的运算符==实现只有当对象完全相同才认为它们相等的方式相同(参见identityHashCode)。

如果运算符==被重写以使用对象状态,则哈希码也必须更改以表示该状态;否则对象无法在默认的SetMap实现等基于哈希的数据结构中使用。

对象的哈希码必须相同,如果根据运算符==它们相等。对象的哈希码仅在对象以影响相等性的方式更改时才应更改。对哈希码没有进一步的要求。它们不需要在程序执行的执行之间保持一致,也没有分布保证。

不相等的对象允许有相同的哈希码。技术上甚至可以允许所有实例具有相同的哈希码,但如果冲突发生得太频繁,则可能会降低基于哈希的数据结构(如HashSetHashMap)的效率。

如果子类重写了hashCode,则它应该也重写运算符==运算符以保持一致性。

实现

int get hashCode => (_value ^ (_value >> 30)) & 0x3FFFFFFF;